zoukankan      html  css  js  c++  java
  • MYSQL隐式类型转换

    MYSQL隐式类型转换

    关于官方文档中的理解大致是:

    如果两个参数比较,有至少一个NULL,结果就是NULL,除了是用NULL<=>NULL 会返回1。不做类型转换

    两个参数都是字符串,按照字符串比较。不做类型转换

    两个参数都是整数,按照整数比较。不做类型转换

    如果不与数字进行比较,则将十六进制值视为二进制字符串。

    有一个参数是 TIMESTAMP 或 DATETIME,并且另外一个参数是常量,常量会被转换为时间戳

    有一个参数是 decimal 类型,如果另外一个参数是 decimal 或者整数,会将整数转换为 decimal 后进行比较,如果另外一个参数是浮点数,则会把 decimal 转换为浮点数进行比较

    所有其他情况下,两个参数都会被转换为浮点数再进行比较

    最后那一句话很重要,说明如果我是字符串和数字比较,需要将字符串转为浮点数,这很明显会转换失败

    在这里我试了试如果是字符串和数字比较:

    t0191dcf58436a0ef72.png

    可以看到在进行类型转换的时候,将字符串转换的时候会产生一个warning,转换的结果为0,但是如果字符串开头是数字的时候还是会从数字部分截断,转换为数字。

    现在可以很好理解开头说的为什么username=0会导致返回数据了,就是因为这里会将数据转换为浮点数比较,但是字符串转换会出问题,从而返回0使得0=0从而为true得到结果,而后面passwd查询少一组数据的原因就是admin的passwd字段第一个字符是2 从而返回2 并非为0。

    转自:http://netsecurity.51cto.com/art/201705/538890.htm

  • 相关阅读:
    beta冲刺总结-咸鱼
    咸鱼翻身beta冲刺博客集
    事后诸葛亮
    个人作业——软件产品案例分析
    Alpha冲刺博客集
    结对作业第二次
    项目需求分析(团队)
    第二次作业——个人项目实战
    软件工程实践第一次作业--准备
    beta冲刺总结
  • 原文地址:https://www.cnblogs.com/justphp/p/9452421.html
Copyright © 2011-2022 走看看