MySQL错误 - 无效的日期时间格式:1292列''的不正确日期时间值。

8
我正在使用Os X 10.9.2中的mysql,当我尝试在本地运行我的php网站时,出现了以下错误:

Invalid datetime format: 1292 Incorrect datetime value: '' for column nameOfTheColumn

当我尝试在datetime字段中插入空值时,就会出现此错误。该网站在生产环境和其他计算机上都可以正常工作,因此问题出现在数据库中,需要在本地数据库中解决。通过阅读有关该问题的信息,我发现mysql可能在Strict模式下运行,因此我编辑了/usr/local/mysql/my.cnf文件并注释掉了以下行:
 #sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES 

我重启电脑后仍然无法使用,但根据在线文档和其他问题,这是正确的方法,但我想知道到底需要做出哪些更改才能使我的应用程序正常工作。请注意,该代码在生产环境中、Windows平台上的xampp等都可以正常运行,因此不能进行更改,只需在MYSQL数据库中进行正确的更改即可在本地工作。
提前致谢!

1
你的日期时间列允许为空吗? - user3470953
是的,但我要重申的是该网站在生产环境和其他地方(如我的Windows PC上的xampp)都能正常工作。我无法更改数据库结构和代码。问题出在mysql配置上,我已经阅读了相关内容,但最终我不知道我在my.cnf或其他相关文件中需要做出什么确切的更改。 - daveloper
你是否已经考虑过从一个正常运行的安装中简单地复制MySQL配置到你的电脑上?别忘了根据情况修改MySQL数据目录和套接字的路径。 - Kaii
@开发者 即使我为datetime列插入''值,它也不会抛出任何错误,而是转换为'0000-00-00 00:00:00'。即使我没有注释sql_mode,也是如此。可能存在其他问题。 - user3470953
4个回答

9

看起来你的OSX上MySQL实例的默认sql_mode设置为拒绝无效日期。

你可以尝试输入以下命令:

SET SESSION sql_mode='ALLOW_INVALID_DATES' 

当您初始化会话时。

太好了!我必须使用它来运行更新以将一些无效的日期时间更改为有效的... - Darragh Enright

0

您可以将列更改为允许为空

ALTER TABLE table_name MODIFY datetime_column_name datetime;

只要未声明为 NOT NULL,列默认可为空。


1
我只想添加from manual中的内容:对于所有引擎,UNIQUE索引允许在可以包含NULL的列中存在多个NULL值。 - VMai
唯一列如何允许多个空值? - user3470953
即使一列是可空的,根据您的陈述,创建唯一索引也没有问题。NULL 值不会被视为重复项。 - VMai
引擎在这种情况下根本没有检查唯一约束。NULL表示“缺失的未知值”,并且与其他值有所不同。阅读有关NULL概念的更多信息,以及在MySQL手册中使用或不理解它时可能出现的问题 - Kaii

0

我们的MySQL 5.6服务器上出现了类似的问题。
当我将sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES更改为sql_mode=NO_ENGINE_SUBSTITUTION时,问题得到解决。

当然,确保值处于正确的格式中是个好主意。
例如,如果列类型为“DATETIME”,但在php中我们尝试插入由date('c')生成的值 - 我们会收到该错误(如果开启了严格模式)。但是当我们将其更改为:date('Y-m-d H:i:s')时,问题就解决了。


0
最后我找到了解决方案,事实上我已经在路上了,解决方案是注释掉sql_mode,但文件位于/etc/my.cnf而不是/usr/local/mysql/my.cnf。如果您不注释此行,并尝试插入空值,则会引发错误,但如果您将其注释掉,则空值变为“0000-00-00 00:00:00”。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接