MySql在5.7.*版本中不允许将完整日期插入到datetime字段中。

27 浏览
0 Comments

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')

0
0 Comments

问题的原因:

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匹配两位数年份而不是四位数年份)。

0
0 Comments

MySQL文档中说明了MySQL对于时间的识别格式,可以使用带有分隔符的字符串格式,也可以使用不带分隔符的字符串格式,还可以直接使用数字格式。然而,在将日期/时间值插入到datetime字段中时,MySQL 5.7.*版本不允许使用完整的日期格式。

要解决这个问题,需要使用24小时制的时间格式。如果是通过PHP传递日期/时间,可以参考相关问题的解答。

0