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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值