如何解决向MySQL datetime字段插入自定义日期格式报错问题
解决MySQL datetime字段插入dd/mm/yyyy h:m格式数据的ERROR 1292问题
ERROR 1292 (22007) 是因为MySQL默认仅识别 YYYY-MM-DD HH:MM:SS 格式的datetime值,你输入的 dd/mm/yyyy h:m 格式不符合默认解析规则,以下是几种可行的解决办法:
方法一:插入时转换格式(推荐)
用STR_TO_DATE()函数将自定义格式的字符串转换为MySQL认可的datetime类型,示例插入语句:
INSERT INTO sport (`TIME`, 其他字段) VALUES (STR_TO_DATE('20/07/2024 19:15', '%d/%m/%Y %H:%i'), 对应字段值);
参数说明:
%d:两位数字的日(01-31)%m:两位数字的月(01-12)%Y:四位数字的年%H:24小时制的小时(00-23)%i:两位数字的分钟(00-59)
方法二:临时修改会话的日期解析规则
如果需要批量插入同格式数据,可以临时修改当前会话的日期格式配置,让MySQL自动解析你的输入格式:
-- 关闭严格模式(避免格式校验报错) SET session sql_mode = ''; -- 设置会话级的日期、时间格式 SET session date_format = '%d/%m/%Y %H:%i'; SET session time_format = '%H:%i';
执行以上语句后,直接用原格式插入即可:
INSERT INTO sport (`TIME`, 其他字段) VALUES ('20/07/2024 19:15', 对应字段值);
注意:该配置仅对当前数据库连接会话有效,断开连接后会恢复默认设置。
方法三:全局修改日期格式(不推荐)
如果你的业务系统统一使用dd/mm/yyyy h:m格式,可以修改全局配置,但会影响所有数据库连接,需谨慎操作:
SET GLOBAL date_format = '%d/%m/%Y %H:%i'; SET GLOBAL time_format = '%H:%i';
修改后需要重启MySQL服务或重新建立连接才能生效,且后续所有会话都会使用该格式解析日期字符串。
内容的提问来源于stack exchange,提问作者Guif If
相关产品推荐
相关产品推荐

