Mysql隐式转换一些理解 附赠一些比较

MySql隐式转换

以下规则描述比较操作的转换方式:

如果一个或两个参数都为空,则比较结果为空,但空安全<=>相等比较运算符除外。对于空值<=>空值,结果为真。不需要转换。

如果比较操作中的两个参数都是字符串,则将它们作为字符串进行比较。

如果两个参数都是整数,则将它们作为整数进行比较。

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

如果其中一个参数是timestamp或datetime列,而另一个参数是常量,则在执行比较之前,该常量将转换为timestamp。这样做是为了更好地支持ODBC。注意,这不是为in()中的参数所做的!为了安全起见,在进行比较时始终使用完整的日期时间、日期或时间字符串。例如,要在与日期或时间值之间使用时获得最佳结果,请使用cast()将值显式转换为所需的数据类型。

如果其中一个参数是十进制值,则比较取决于另一个参数。如果另一个参数是十进制或整数值,则将这些参数作为十进制值进行比较;如果另一个参数是浮点值,则将这些参数作为浮点值进行比较。

在所有其他情况下,参数都是作为浮点数(实数)进行比较的。

                                                    ---度娘

eg:
select * from test where user=0
这种情况属于 其他情况 所以作为浮点数进行比较 把字符串和0都转为浮点数,字符串会转换失败(并不是所有字符串都会转成0 eg:1huahua转换浮点数为1.00),变成0,结果就成了0=0 就会列出所有数据
tips:mysql 字符串和数字比较时 如果字符串前边有数字 会把后面的字符串丢掉进行比较,如果没有数字 直接用0进行比较

SELECT
IF(1=1,true,False)Boolean1,
IF('A',true,False)Boolean2,
IF('A' AND 1=1,true,false)Boolean3
FROM DUAL
Boolean1 :1
Boolean2 :0
Boolean3 :0
SELECT
IF(1=1,true,False)Boolean1,
IF('1A',true,False)Boolean2,
IF('1A' AND 1=1,true,false)Boolean3
FROM DUAL
Boolean1 :1
Boolean2 :1
Boolean3 :1
©️2020 CSDN 皮肤主题: 游动-白 设计师:上身试试 返回首页