mysql数据库查找类型不匹配

  无心中看到10级学长的博客,提到了mysql数据库类型查找不匹配的问题,博客地址是:卢俊达 。html

数据库中建表中会对每一个属性进行类型划分,而后在查找数据库select时:mysql

MySQL 的文档 (Type Conversion in Expression Evaluation) 中提到,在作比较时,会按这样的规则进行必要的类型转换:sql

两个参数至少有一个是 NULL 时,比较的结果也是 NULL,例外是使用 <=> 对两个 NULL 作比较时会返回 1,这两种状况都不须要作类型转换 两个参数都是字符串,会按照字符串来比较,不作类型转换 两个参数都是整数,按照整数来比较,不作类型转换 十六进制的值和非数字作比较时,会被当作二进制串,和数字作比较时会按下面的规则处理 有一个参数是 TIMESTAMP 或 DATETIME,而且另一个参数是常量,常量会被转换为 timestamp 有一个参数是 decimal 类型,若是另一个参数是 decimal 或者整数,会将整数转换为 decimal 后进行比较,若是另一个参数是浮点数,则会把 decimal转换为浮点数进行比较 全部其余状况下,两个参数都会被转换为浮点数再进行比较

在博客:Xupeng's blog 中有提到,例如在表中存有name的属性,而且属性的类型是varchar,在进行数据库查找时,若是查找name = '11111111',则MySQL会将查询参数转换为肯定的数值30,以后快速的再表中查找与之队形的数值。若是查找name = 1111111,则要查找的参数会被转化为浮点型,而且name字段的值也会被转换成浮点型,答案是在转换过程当中,name属性的不少值,会转换成相等的数值,好比 '111222''111222aabb'' 111222' 和 '11122.2e1'.因此MySQL不能有效的使用索引,就退化为索引扫描甚至是全表扫描。因此会引发时间上和CPU利用率上的差别。数据库

相关文章
相关标签/搜索