MYSQL ERROR 1292 错误解决办法 -- 数据类型不匹配

1 字符型不匹配整型

(1)现象:1292 错误 Truncated incorrect DOUBLE value …… (2)操作: update act_code set status=3,activeTime=now() where id in( select id from ( select id from act_code where status=0 and serialNo between 712600001060 and 712600001061 ) t ) ; (3)分析: 先说正确的sql,如下: update act_code set status=3,activeTime=now() where id in( select id from ( select id from act_code where status=0 and serialNo between ‘712600001060’ and ‘712600001061’ ) t ) ; 看出区别来了吗? 只是在子查询中 between and 后的参数多了单引号。 数据库中表 act_code 的serialNo字段是varchar类型 单独执行如下sql时(未加单引号),是没问题的 select id from act_code where serialNo between 712100000041 and 712100000068; 但是当放到单表更新子查询中(第一个sql),就报了mysql 1292 的错。而唯一的差别就是varchar字段作为条件语句时其参数没加单引号。

2 拼接字符串时不要使用+

更新数据表的时候,Mysql报错: Err] 1292 - Truncated incorrect DOUBLE value: ‘XXX’ update user set nickname2 = “2”+name where nickname!=“”;

解决⽅法: SQL语句在拼接字符串时使⽤函数CONCAT()⽽不要⽤“+”

正确语法: update user set nickname2 = CONCAT(2,nickname) where LENGTH(user_nick)<10;

3 不正确的日期格式

导入sql文件时,发生错误: Incorrect date value: ‘0000-00-00 00:00:00’ for column ‘start_play_date’ at row 1

原因是sql_mode默认值含有NO_ZERO_IN_DATE和NO_ZERO_DATE 通过以下sql语句查询sql_model的值: show variables like ‘%sql_mode%’;

解决办法: 执行以下SQL语句把sql_mode中的NO_ZERO_IN_DATE和NO_ZERO_DATE去掉

4 插入表中的数据类型不匹配

错误:Truncated incorrect INTEGER value: ‘‘ 1.建表的字段类型是a,但输入数据的字段类型是b,两者不相符合 2.可能是个警告,如果用insert into select from 语句插入的时候,查询出来没问题,但是插到表里的时候出现这个问题,可能是个警告,加个ignore语句,忽略警告就可以出来 INSERT ignore INTO t_ccie_age select * from

5.关联的条件⼀定要保持数据类型⼀致

情况是这样的假设现在有两张表表A 和表B 表A与表B相互关联⽤的是⼀个⽇期字段关联,但是这个⽇期字段是varchar格式的 字段值⼤概就是这样 2020-12-01 select语句正常书写,正常运⾏ select xx字段 … from 表1 left join 表2 on 表1⽇期字段 = 表2⽇期字段 到这⾥,还是没有问题的 接下来,如果我想要让关联到表2的⽇期往后推⼏天 select xx字段 … from 表1 left join 表2 on DATE_SUB(STR_TO_DATE(表1⽇期字段,参数), interval -7 day) = 表2⽇期字段 这样还是没有问题的会正确地关联到7天之前表2的⽇期数据 可是如果接下来,向某⼀个表写⼊这些信息的话 insert into 要写⼊的表 select xx字段 … from 表1 left join 表2 on DATE_SUB(STR_TO_DATE(表1⽇期字段,参数), interval -7 day) = 表2⽇期字段 就会报⼀个错误,1292,值类型不对 会出现⼀个莫名其妙的,select语句能正常运⾏,但是select insert 却执⾏不了的奇观 经过查找资料以后,真相⼤⽩ 这两个表的关联⽇期字段,是带有索引的,不同的数据类型之间的关联会导致索引⽤不了,就会出问题 所以结论就是 如果要insert select 某个表 关联的条件⼀定要保持数据类型⼀致,否则就会导致索引⽤不了

经验分享 程序员 微信小程序 职场和发展