MySQL INT和CHAR隐式类型转换需要注意什么?

答案

主要需要记住下面两点:

  • 1.当查询字段INT类型,如果查询条件CHAR,将查询条件转换为INT,如果是字符串前导都是数字,将截取前导数字用来比较,如果没有前导数字,则转换为0

  • 2.当查询字段CHAR/VARCHAR类型,如果查询条件INT,将查询字段为换为INT再进行比较,可能会造成全表扫描

答案解析

有如下一张测试表productidint类型,namevarchar类型。

  1. +----+----------+
  2. | id | name |
  3. +----+----------+
  4. | 1 | apple |
  5. | 2 | banana |
  6. | 3 | 99cat |
  7. +----+----------+

情况1:

  1. // 查询条件转化为数字1再比较
  2. mysql> select * from product where id = '1abc23';
  3. +----+---------+
  4. | id | name |
  5. +----+---------+
  6. | 1 | apple |
  7. +----+---------+

情况2:

  1. // 查询字段全部转化成数字,id:1和id:2字段值转化为0,id:3转化成99,再比较
  2. mysql> select * from product where name=0;
  3. +----+----------+
  4. | id | name |
  5. +----+----------+
  6. | 1 | apple |
  7. | 2 | banana |
  8. +----+----------+