Php MySQL错误-无效的日期时间格式:1292不正确的日期时间值:'';专栏

Php MySQL错误-无效的日期时间格式:1292不正确的日期时间值:'';专栏,php,mysql,macos,datetime,Php,Mysql,Macos,Datetime,我在Os X 10.9.2中使用mysql,当我尝试在本地运行我的php网站时,出现以下错误: 无效的日期时间格式:1292列名称的日期时间值“”不正确 当我试图在datetime字段中插入空值时,会发生此错误。该网站在生产和其他一些本地计算机中运行良好,所以问题在数据库中,我必须在本地数据库中解决。在阅读有关该问题的文章时,我了解到mysql可能在严格模式下运行,因此我编辑了/usr/local/mysql/my.cnf,并注释了这一行: #sql_mode=NO_ENGINE_SUBSTI

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

无效的日期时间格式:1292列名称的日期时间值“”不正确

当我试图在datetime字段中插入空值时,会发生此错误。该网站在生产和其他一些本地计算机中运行良好,所以问题在数据库中,我必须在本地数据库中解决。在阅读有关该问题的文章时,我了解到mysql可能在严格模式下运行,因此我编辑了/usr/local/mysql/my.cnf,并注释了这一行:

 #sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES 
我重新启动计算机,但仍然无法工作,但根据联机文档和其他问题,这是一种方法,但我想知道,为了使我的应用程序正常工作,我必须做的具体更改是什么。重复,代码可以在生产环境、使用xampp的windows等环境中使用。。。所以不能改变,因为是为了长时间,只是为了在本地工作,我需要在MYSQL数据库的权利的变化


提前谢谢

您可以将列更改为允许null

ALTER TABLE table_name MODIFY datetime_column_name datetime;

默认情况下,只要列未声明为非NULL,列就可以为NULL。

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

看起来MySQL的osx实例上的默认sql_模式设置为拒绝无效日期

您可以尝试发出以下命令:

SET SESSION sql_mode='ALLOW_INVALID_DATES' 

初始化会话时。

我们的MySQL 5.6服务器上也出现类似问题。
当我将
sql\u mode=NO\u ENGINE\u SUBSTITUTION、STRICT\u TRANS\u TABLES
更改为
sql\u mode=NO\u ENGINE\u SUBSTITUTION
时,问题得到了解决

当然,最好确保值的格式正确。

例如,如果列类型为“DATETIME”,但在php中,我们尝试插入由
date('c')
生成的值,我们将得到该错误(如果启用了严格模式)。但是当我们将其更改为:
date('Y-m-dh:i:s')
时,问题就消失了。

您的datetime列是否允许null?是的,它允许,但我重复一下,该站点在生产和其他位置(如我的windows PC和xampp)运行良好。我无法更改数据库结构和代码。问题出在mysql配置上,我读过这篇文章,但最后我不知道我必须在my.cnf或其他相关文件中做什么样的更改。您是否已经想过简单地将mysql配置从一个工作安装复制到您的计算机上?不要忘记相应地修改mysql datadir、sockets的路径。@开发者即使我为datetime列插入值“”,它也不会引发任何错误,而是会转换为“0000-00-00:00:00”。甚至我也没有评论sql_模式。可能还有其他问题我只想补充:对于所有引擎,唯一索引允许包含NULL的列具有多个NULL值。唯一列如何允许多个NULL值?即使一个列可以为NULL,如您的语句所示,创建唯一索引也没有问题。空值不计算为重复值。在这种情况下,引擎只是不检查唯一的约束
NULL
表示“缺少未知值”,处理方式与其他值有所不同。和MySQL手册中的。完美!我不得不使用它来运行更新,将一些无效的日期时间更改为有效的日期时间。。。