MySql 5.7 版本不允许在日期时间字段中插入完整日期*
Posted
技术标签:
【中文标题】MySql 5.7 版本不允许在日期时间字段中插入完整日期*【英文标题】:MySql not allow to insert full date in datetime field in version 5.7.* 【发布时间】:2019-01-21 08:23:51 【问题描述】:只想通过配置更改此设置。不改变我的查询
当前的 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 => 日期时间(NULL)
当我执行以下查询时
insert into dummy_test values('2018-08-14 05:38:11 pm')
IT 给我一个错误
查询错误 (1292):日期时间值不正确:第 1 行的列 'created_at' 的日期时间值不正确:'2018-08-14 05:38:11 pm'
与
配合得很好insert into dummy_test values('2018-08-14 05:38:11')
【问题讨论】:
时间以 24 小时记数法存储。所以 5:38:11 应该是 17:38:11,因此不再需要 pm。 是的,你说得对,有没有使用 sql_mode 的解决方案,或者当我通过上述查询时直接设置 24 小时时间。 【参考方案1】:每mysql documentation:
MySQL 可以识别以下格式的 TIME 值:
作为 'D HH:MM:SS' 格式的字符串。您还可以使用以下“宽松”语法之一:“HH:MM:SS”、“HH:MM”、“D HH:MM”、“D HH”或“SS”。这里 D 代表天数,取值范围为 0 到 34。
作为“HHMMSS”格式的不带分隔符的字符串,前提是它作为时间有意义。例如,'101112' 被理解为 '10:11:12',但 '109712' 是非法的(它有一个无意义的分钟部分)并变成 '00:00:00'。
作为 HHMMSS 格式的数字,前提是它作为时间有意义。例如,101112 被理解为“10:11:12”。还可以理解以下替代格式:SS、MMSS 或 HHMMSS。
因此,您必须在发送到 MySQL 时使用 24 小时制。如果您通过 php 传递日期/时间,this question 可能会有所帮助。
【讨论】:
【参考方案2】:你可以使用STR_TO_DATE函数
即..insert into dummy_test values(STR_TO_DATE('2018-08-14 05:38:11 PM', '%Y-%m-%d %h:%i:%s %p'))
如果需要,您可以添加“BeforeInsert”表触发器来截取和转换这些值。
【讨论】:
感谢您的宝贵重播,但我不想更改 sql 查询,因为我的项目正在进行中。我就是想通过sql配置改一下 此外,提供的格式字符串与格式化日期不匹配(格式字符串使用斜线作为日期,%y
匹配 2 位数年份而不是 4 位数年份)。 以上是关于MySql 5.7 版本不允许在日期时间字段中插入完整日期*的主要内容,如果未能解决你的问题,请参考以下文章
使用 MySQL/PHP 在字段中使用 now() 插入当前日期/时间