我在mysql数据库中有一个带有datetime列的表。此列的默认值设置为“1900-01-01 00:00:00”。
但是我注意到插入的4000行中,1行的值设置为'0000-00-00 00:00:00'。尽管设置了默认值,但我对此怎么回事感到困惑
这是MySql中的已知错误或问题吗?这大约发生在4000行中。任何人都可以在这里提供任何帮助吗?
答案 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'
。
答案 2 :(得分:0)
Mysql DATETIME
字段实际上不能具有默认值。请改为使用NOW()
,或使用TIMESTAMP
数据类型,默认设置为CURRENT_TIMESTAMP()
。