mysql报1292 Incorrect datetime value错误解决方法

mysql报1292 Incorrect datetime value错误解决方法

问题

今天在Mysql5.7.26中执行如下代码的时候出现“1292”错误,具体如下:

insert into Developer (id, DeveloperName, Email, GithubURL, ImageURL, Department, JoinedDate) values (1, ‘Tadeas’, ‘tdemchen0@craigslist.org’, ‘tmccarney0@dropbox.com’, ‘http://dummyimage.com/156x100.png/5fa2dd/ffffff’, ‘Support’, ‘8/26/2022’)

  • 1292 - Incorrect datetime value: ‘8/26/2022’ for column ‘JoinedDate’ at row 1
  • 时间: 0.001s

参考及解决

mysql插入、修改datetime类型的字段,报 Incorrect datetime value 的错误,sql语句如下:

UPDATE xxx set time='2023-02-28T09:30:01.579049+08:00' WHERE id=1

如果去掉 +08:00 就可以插入。

试了网上说的查看并修改时区,都没用,最后发现是 sql_mode导致的。

默认的sql_mode的值是

ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

其中一个值是 STRICT_TRANS_TABLES ,这个选项会对日期时间类型的值进行严格的转换和检查,因此可能会导致日期时间值的解析和转换出现错误。

具体来说,STRICT_TRANS_TABLES 选项会强制 MySQL 对日期时间类型的值进行检查,确保其符合 MySQL 所定义的格式要求。如果日期时间字符串的格式不符合要求,MySQL 就会报 “Incorrect datetime value” 的错误。

/etc/my.cnf(Win系统是my.ini) 中,显式地将sql_mode中的STRICT_TRANS_TABLES这个值去掉,或者将sql_mode置为空,重启mysql即可解决。

[mysqld]
sql_mode =

重启后插入成功!

参考并感谢:https://blog.csdn.net/CHEndorid?type=blog

<think>好的,我现在需要解决用户提到的MySQL中不正确的日期时间值问题。用户给出的错误是“incorrect datetime value”,类似引用[2]中的1366错误,但这次是关于日期时间而不是字符串。首先,我应该回想一下常见的日期时间错误原因。 首先,日期时间格式是否正确?比如用户是否尝试插入像'YYYY-MM-DD HH:MM:SS'之外的格式,或者有无效的日期,比如2月30日。这时候MySQL错,因为日期无效。这种情况下,需要检查插入的数据是否符合标准格式。 其次,可能是SQL模式的问题。MySQL有不同的SQL模式,比如STRICT_TRANS_TABLES会严格检查数据类型,如果模式设置严格,无效日期会被拒绝。而如果模式宽松,可能会插入'0000-00-00'这样的值。用户可能在严格模式下,所以需要调整SQL模式或者修正数据。 另外,要考虑客户端和服务器端的时区设置是否一致。如果时区不一致,转换时可能导致日期时间错误。但这种情况可能错不同,不过也是需要检查的一个点。 接下来,用户可能需要修改SQL模式。比如,通过SET命令临时修改,或者在配置文件中永久调整。例如,去掉STRICT_TRANS_TABLES或ALLOW_INVALID_DATES。但允许无效日期可能带来数据问题,所以建议优先修正数据格式。 另外,检查表的字段类型是否正确。比如DATETIME和TIMESTAMP的范围不同。TIMESTAMP的范围是'1970-01-01 00:00:01'到'2038-01-19 03:14:07',而DATETIME更广。如果插入的时间超出范围,也会错。 然后,应用程序中的日期处理是否正确。比如使用ORM框架时,是否正确地格式化了日期时间,或者在代码中是否有错误的字符串拼接。 可能的解决方案步骤: 1. 检查插入的日期时间值是否符合MySQL支持的格式。 2. 查看当前SQL模式,必要时调整。 3. 确认字段类型是否合适,比如是否超出TIMESTAMP范围。 4. 检查应用程序中的日期处理逻辑。 生成的问题应该围绕这些方面,比如如何修改SQL模式,如何处理无效日期格式,或者时区问题如何影响日期时间值。</think>### MySQL中“Incorrect datetime value错误解决方法MySQL错“Incorrect datetime value”时,通常由以下原因导致: #### 1. **日期时间格式不符合标准** - MySQL支持的日期时间格式为`YYYY-MM-DD HH:MM:SS`或`YYYYMMDDHHMMSS`。若插入的值为`2023/05/20`、`20-05-2023`等非标准格式,会直接错。 - **解决方法**:使用标准格式,或通过`STR_TO_DATE()`函数转换。例如: ```sql INSERT INTO table (date_column) VALUES (STR_TO_DATE('2023/05/20', '%Y/%m/%d')); ``` #### 2. **SQL模式限制** - MySQL的SQL模式(如`STRICT_TRANS_TABLES`)会严格校验日期有效性。若尝试插入`2023-02-30`(无效日期),在严格模式下会错[^1]。 - **解决方法**: - **临时调整模式**(仅对当前会话有效): ```sql SET SESSION sql_mode = 'ALLOW_INVALID_DATES'; -- 允许无效日期(如0000-00-00) ``` - **永久调整模式**:修改MySQL配置文件`my.cnf`(或`my.ini`),在`[mysqld]`下添加: ``` sql_mode = "ONLY_FULL_GROUP_BY,NO_ENGINE_SUBSTITUTION" ``` #### 3. **字段类型范围限制** - `TIMESTAMP`类型的范围为`1970-01-01 00:00:01`至`2038-01-19 03:14:07`,若插入超出此范围的值(如`2100-01-01`),会错。 - **解决方法**:改用`DATETIME`类型(范围`1000-01-01 00:00:00`至`9999-12-31 23:59:59`)。 #### 4. **时区不一致** - 若服务器与客户端时区不同,可能导致日期时间转换错误。例如,插入`2023-05-20 12:00:00+08:00`时,若服务器时区为UTC,可能因转换失败错。 - **解决方法**:统一时区设置: ```sql SET GLOBAL time_zone = '+8:00'; -- 设置全局时区 SET time_zone = '+8:00'; -- 设置当前会话时区 ``` #### 5. **应用程序处理错误** - 代码中未正确格式化日期时间(如拼接字符串时遗漏引号),可能导致插入类似`2023-05-20 12:00:00AM`的无效值。 - **解决方法**:使用参数化查询或ORM框架(如Hibernate、Sequelize)自动处理日期格式。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

若行若冲

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值