zoukankan      html  css  js  c++  java
  • Mysql隐式类型转换原则

    MySQL 的隐式类型转换原则:

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

    注意一个安全问题:假如 password 类型为字符串,查询条件为 int 0 则会匹配上。

    由于 MySQL 隐式类型转换规则比较复杂,依赖 MySQL 隐式转换很容易出现各种想想不到的问题,而且 MySQL 隐式类型转换本身也是非常耗费 MySQL 服务器性能的,所以非常不推荐这样使用。

     

    详见博文:http://www.cnblogs.com/rollenholt/p/5442825.html

  • 相关阅读:
    python库--pandas--Series.str--字符串处理
    前端--jstree--异步加载数据
    python库--flask--创建嵌套蓝图
    Git--生成公钥和私钥并添加gitlab访问权限
    es查询--请求body
    python生成时间序列(date_range)
    golang使用组合完成伪继承
    golang interface类型的动态绑定
    ruby环境安装草稿
    openfire
  • 原文地址:https://www.cnblogs.com/wangwust/p/mysql_implicit_type.html
Copyright © 2011-2022 走看看