zoukankan      html  css  js  c++  java
  • mysql数据库查找类型不匹配

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

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

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

    两个参数至少有一个是 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利用率上的差异。

  • 相关阅读:
    Andriod调试桥
    抓包工具charles的使用
    测试常用工具
    Indentation error codes
    Cmder 中文乱码的解决方法
    修改Cmder命令提示符
    统计单词出现的字数
    将字串内容输出到文件
    python数据实例str
    python语法检查工具
  • 原文地址:https://www.cnblogs.com/chenyang920/p/8397910.html
Copyright © 2011-2022 走看看