首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MySql -存储'0000-00-00 00:00:00‘代替默认日期值

MySql -存储'0000-00-00 00:00:00‘代替默认日期值
EN

Stack Overflow用户
提问于 2013-10-08 19:46:18
回答 3查看 18K关注 0票数 6

我在mysql数据库中有一个包含datetime列的表。此列的默认值设置为'1900-01-01 00:00:00‘。

然而,我注意到,在插入的4000行中,有1行将此值设置为'0000-00-00 00:00:00‘。我非常困惑,尽管设置了默认值,但怎么会发生这种情况。

这是MySql中已知的错误或问题吗?这种情况大约每4000行发生一次。这里有人能提供帮助吗?

EN

回答 3

Stack Overflow用户

发布于 2013-10-08 20:05:10

如果您的表如下所示:

代码语言:javascript
运行
复制
create table foo (
  name VARCHAR(50),
  dob DATETIME DEFAULT '1900-01-01 00:00:00'
);

..。它应该是work just fine

您应该注意到,默认值并不意味着强制。您仍然可以根据自己的喜好插入不同的值或更新行:

代码语言:javascript
运行
复制
insert into foo (name) values ('Jim'), ('Joe'), ('Jack');
insert into foo (name, dob) values ('Jill', '1999-12-31 23:59:59');
update foo set dob = current_timestamp where name='Jack';

这可能就是发生的事情。

由于其值为0000-00-00 00:00:00,这是MySQL提供的已知错误/特性。根据您的SQL模式,您可以存储无效或不完整的日期。

SQL:为避免插入日期,您需要强化0000-00-00模式:

代码语言:javascript
运行
复制
mysql> SET sql_mode = '';
Query OK, 0 rows affected (0.00 sec)

mysql> UPDATE foo SET dob='invalid' WHERE name='Jim';
Query OK, 1 row affected, 1 warning (0.02 sec)
Rows matched: 1  Changed: 1  Warnings: 1

mysql> SET sql_mode = 'STRICT_ALL_TABLES';
Query OK, 0 rows affected (0.00 sec)

mysql> UPDATE foo SET dob='invalid' WHERE name='Joe';
ERROR 1292 (22007): Incorrect datetime value: 'invalid' for column 'dob' at row 2
mysql>
mysql> SELECT * FROM foo;
+------+---------------------+
| name | dob                 |
+------+---------------------+
| Jim  | 0000-00-00 00:00:00 |
| Joe  | 1900-01-01 00:00:00 |
| Jack | 1900-01-01 00:00:00 |
+------+---------------------+
3 rows in set (0.00 sec)
票数 6
EN

Stack Overflow用户

发布于 2013-10-08 19:49:05

TIMESTAMP数据类型用于同时包含日期和时间部分的值。

TIMESTAMP的范围从'1970-01-01 00:00:01'协调时到'2038-01-19 03:14:07'协调时。

票数 3
EN

Stack Overflow用户

发布于 2013-10-08 19:48:30

Mysql DATETIME字段实际上不能有默认值。改为对查询使用NOW(),或者使用TIMESTAMP数据类型,该数据类型可以默认设置为CURRENT_TIMESTAMP()

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19246881

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档