我在Os X 10.9.2中使用mysql,当我尝试在本地运行我的php网站时,我有这个错误:
无效的日期时间格式:1292错误的日期时间值:" for column nameOfTheColumn
当我试图在日期时间字段中插入空值时发生错误。该网站在生产和其他一些本地计算机工作良好,所以问题是在数据库,我必须在我的本地数据库解决。阅读有关问题,我读到mysql可以在严格模式下运行,所以我编辑/usr/local/mysql/my.cnf,并注释掉这一行:
#sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
我重新启动计算机,仍然不工作,但根据在线文档和其他问题,这就是方法,但我想知道它到底是什么改变我必须做的,使我的应用程序工作。重复,代码可以在生产环境中工作,使用xampp等窗口。所以不能改变,因为是长,只是在本地工作,我需要在MYSQL数据库正确的改变。
提前感谢!
看起来MySQL的osx实例上的默认sql_mode设置为拒绝无效日期。
您可以尝试发出以下命令:
SET SESSION sql_mode='ALLOW_INVALID_DATES'
你可以改变你的列允许null
ALTER TABLE table_name MODIFY datetime_column_name datetime;
只要列没有声明为not NULL,默认情况下列是可空的
最后我找到了解决方案,实际上我正在路上,解决方案是注释掉sql_mode,但文件位于/etc/my.cnf而不是/usr/local/mysql/my.cnf如果您不注释这一行,并且尝试插入一个空值,则会引发错误,但如果您注释掉它,则空值变为'0000-00-00 00:00:00'
我们的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')
时,问题就解决了。