MYSQL ERROR 1292 错误解决办法 -- 数据类型不匹配
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 某个表
关联的条件⼀定要保持数据类型⼀致,否则就会导致索引⽤不了
更多推荐
所有评论(0)