我在托管上获得了MySql 5.7 DB。 DB包含具有datetime列的表。例如:
CREATE TABLE test_date (
`date` datetime NOT NULL
)
PHP应用程序中有一些日期应该存储到datetime列中。使用DateTime :: DATE_ATOM格式格式化该日期。 PHP应用程序使用一些框架将记录插入到该表中(这并不重要)所以最终INSERT查询看起来如下:
INSERT INTO `test_date`(`date`) VALUES ('2018-05-22T12:33:16-03:00')
但是MySql抛出错误:
#1292 - Incorrect datetime value: '2018-05-22T12:33:16-03:00' for column 'date' at row 1
如果我从字符串中移除时区偏移量( -03:00 ),则插入成功完成。
我在本地VM和不同的远程数据中心安装了多个MySql 5.6实例,但我从未遇到过这个问题:MySql始终使用DateTime :: DATE_ATOM格式化日期时正常工作。
我挖掘了Google,但没有发现MySql 5.7中与datetime相关的任何具体更改。
你能否指出为什么DateS :: DATE_ATOM字符串被MySql 5.7拒绝或提供任何指针?
更新:看起来错过了这个问题的根本原因NO_ENGINE_SUBSTITUTION sqlMode(ref MYSQL incorrect DATETIME format)。看起来它默认设置在大多数安装(或管理员正在设置),但不在我的主机上。