MySql在5.7.*版本中不允许将完整日期插入到datetime字段中。
MySql在5.7.*版本中不允许将完整日期插入到datetime字段中。
我只想通过配置来改变这个问题,而不改变我的查询。
当前的SQL_MODE是
STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
我有一个名为dummy_test的表,其中有一个字段名为created_at
created_at => datetime(NULL)
当我执行下面的查询时
insert into dummy_test values('2018-08-14 05:38:11 pm')
会给我一个错误
Error in query (1292): Incorrect datetime value: '2018-08-14 05:38:11 pm' for column 'created_at' at row 1
使用以下查询是正常的
insert into dummy_test values('2018-08-14 05:38:11')
问题的原因:
MySQL 5.7版本及以上的版本不允许在datetime字段中插入完整的日期。
解决方法:
可以使用STR_TO_DATE函数将日期字符串转换为datetime格式,然后进行插入操作。例如:
insert into dummy_test values(STR_TO_DATE('2018-08-14 05:38:11 PM', '%Y-%m-%d %h:%i:%s %p'))
如果希望不修改SQL查询语句,可以添加一个"BeforeInsert"表触发器来拦截并转换这些值。
此外,提供的格式字符串与格式化的日期不匹配(格式字符串使用斜杠表示日期,%y
匹配两位数年份而不是四位数年份)。