我刚刚将安装从 MySQL 5.0.5 升级到 MySQL 5.6。
使用 MySQL 5.0,我可以像这样插入查询:
INSERT INTO mytable (myid, mydate, myname) VALUES (NULL, '', 'John');
但显然不再是了。现在,如果我尝试,它会给我这个错误:
#1292 - Incorrect date value: '' for column 'mydate' at row 1
顺便说一下,mydate 定义为 mydate date NOT NULL,
如果我将查询更改为...
INSERT INTO mytable (myid, mydate, myname) VALUES (NULL, '0000-00-00', 'John');
...或...
INSERT INTO mytable (myid, mydate, myname) VALUES (NULL, 0, 'John');
...比它成功。
此行为是否由 MySQL 中的某些设置控制?如果有的话,我在哪里可以找到它?或者我必须更改所有查询吗?有建议吗?
谢谢。
最佳答案
不言而喻,你做错了。如果您打算不存储任何内容,则该列应该可为空,并且当您应该使用 NULL
时,不应尝试插入空字符串。
但请考虑一下:
If strict mode is not in effect, MySQL inserts adjusted values for invalid or missing values and produces warnings.
但是当严格模式生效时...
For transactional tables, an error occurs for invalid or missing values in a data-change statement when either
STRICT_ALL_TABLES
orSTRICT_TRANS_TABLES
is enabled. The statement is aborted and rolled backhttp://dev.mysql.com/doc/refman/5.6/en/sql-mode.html#sql-mode-strict
SELECT @@SQL_MODE;
应该显示您正在使用(至少)STRICT_TRANS_TABLES
运行。虽然这不是 5.6 中的内部默认设置,但它包含在默认的 5.6 配置文件中。如果您想要旧的行为,您需要将其删除并重新启动服务器。
...尽管您应该考虑让您的代码表现得更正确。
关于具有非空空日期字段的 Mysql INSERT 查询。是否可以?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33047431/