做两表关联时,有个比较,bigint和varchar 结果报错’Data truncation: Truncated incorrect DOUBLE value’,大多数问题出现是制表时不规范,类型没有统一,或者是子表查询出来的字段会默认是varchar;还有就是在查询时会出现精度负优化,搞得找问题是各种迷。在插入语句中出现,会有这个类型报错提示,查询时就没有,直接通过!
select 165933842860300000003 = '165933842860300000004'; 这个sql返回的结果就是1,认为条件成立,这个查询出来就会出现各种奇葩的问题```
如:

而select 165933842860300000003 = 165933842860300000004;返回的结果就是0,条件不成立
出现上面问题的原因是:在MySQL中当我们对不同类型的值进行比较的时候,为了使得这些数值可比较(也可以称为类型的兼容性),MySQL
会做一些隐式转换(Implicit type conversion) //
MySQL官方文档中有一篇介绍关于比较函数与运算符的文档。其中写到, Strings are automatically converted
to numbers and numbers to strings as necessary. 意思是必要时字符串和数字之间会互相转换。
// https://dev.mysql.com/doc/refman/8.0/en/comparison-operators.html
1、统一字段类型,用bigint就都用bigint,用varchar都用varchar。这样不仅规范,而且可以避免两表联查时索引失效;
2、查询语句的条件中严格按照字段的类型写查询值。避免mysql进行隐式转换。也同时可以避免索引失效;
3、统一查询比较时的类型,使用mysql提供的CAST()函数,或者各种字符串函数处理。