mysql 类型 自动转化_自动MySQL数据类型转换

我刚刚碰到一个有趣的案例,在MySQL中进行数据类型转换.考虑以下查询:

SELECT * FROM (SELECT 0 AS col) AS t WHERE t.col=123; #Yields 0 rows

SELECT * FROM (SELECT 0 AS col) AS t WHERE t.col="123"; #Yields 0 rows

SELECT * FROM (SELECT 0 AS col) AS t WHERE t.col="0"; #Yields 1 row, col=0

SELECT * FROM (SELECT 0 AS col) AS t WHERE t.col="abc"; #Yields 1 row, col=0

第1、2和3行对我来说似乎很合逻辑.但是在第4行上,为什么亲爱的SQL哦,为什么呢?您急切地将“ abc”强制转换为等于0吗?

我的意思是,我明白了-“ abc”不是整数,所以0才最有意义…在这种情况下,这种行为实际上有用吗?据我所知,它可能会导致错误(就像在我们的应用程序中一样)…

也许有一个MySQL“模式”可以为这样的自动类型转换启用警告?

解决方法:

MySQL在数字上下文中对字符串进行隐式类型转换.字符串的前导数字字符将转换为数字,因此诸如“ abc”之类的字符串将转换为0.

这可能非常方便,因为此转换不会导致错误(显式转换会导致错误).

道理很简单:将常量与列进行比较时,使列与列具有相同的类型.也就是说,请勿比较字符串和数字,以免发生意外情况.

标签:casting,sql,mysql

来源: https://codeday.me/bug/20191119/2037998.html

你可能感兴趣的:(mysql,类型,自动转化)