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

时间:2013-10-08 11:46:18

标签: mysql datetime

我在mysql数据库中有一个带有datetime列的表。此列的默认值设置为“1900-01-01 00:00:00”。

但是我注意到插入的4000行中,1行的值设置为'0000-00-00 00:00:00'。尽管设置了默认值,但我对此怎么回事感到困惑

这是MySql中的已知错误或问题吗?这大约发生在4000行中。任何人都可以在这里提供任何帮助吗?

3 个答案:

答案 0 :(得分:6)

如果您的表格如下:

create table foo (
  name VARCHAR(50),
  dob DATETIME DEFAULT '1900-01-01 00:00:00'
);

......应该work just fine

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

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模式,您可以存储无效或不完整的日期。

修改:为了避免插入0000-00-00个日期,您需要加强SQL模式:

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)

答案 1 :(得分:3)

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

TIMESTAMP的UTC范围为'1970-01-01 00:00:01' UTC到'2038-01-19 03:14:07'

Official Doc

答案 2 :(得分:0)

Mysql DATETIME字段实际上不能具有默认值。请改为使用NOW(),或使用TIMESTAMP数据类型,默认设置为CURRENT_TIMESTAMP()