MySQL对varchar字段使用int查询会发生什么?

谢谢光光的问题分享,享受排查问题找到答案的过程web

  • MySQL会对varchar字段的数据进行int的转型
  • 索引会失效
  • 查询即将变得很慢
  • 不单单是这样的类型会转换,当类型匹配不上的时候MySQL将会替咱们作一次类型转换,好比以前用varchar的类型去查询datatime,MySQL就是帮咱们作了一次类型转换才得以查询

这篇文章写得很好https://blog.csdn.net/u010825931/article/details/103811797svg

假设t_test表中的no是varchar类型的,那么函数

SQL1:SELECT * FROM t_test t1 where t1.no  = 1;
SQL2:SELECT * FROM t_test t1 where t1.no  = '1';

两个查询是不一样的,SQL1的查询实际跟如下查询语句是相同的优化

SQL1:SELECT * FROM t_test t1 where CAST(t1.no AS signed int) = 1;

对索引字段作函数操做,可能会破坏索引值的有序性,所以优化器就决定放弃走树搜索功能。.net

小小的知识点,对之后遇到相似的问题能够有一个排查的思路。code