我正在运行以下查询
SELECT * FROM `student` WHERE '123sks'=123
其返回的真实值,我很困惑为什么?
我正在使用5.7.24-MySQL社区服务器(GPL)
如果我想用123来比较'123sks',导致错误,该怎么办。
答案 0 :(得分:3)
来自:Type Conversion in Expression Evaluation
当运算符与不同类型的操作数一起使用时,
类型 进行转换以使操作数兼容。
一些 转换隐式发生。
要了解MySql如何进行这些类型转换的想法,请尝试以下显式转换:
SELECT
cast('123abc' as unsigned),
cast('1abc23' as unsigned),
cast('abc123' as unsigned)
将得到以下结果:
| col1 | col2 | col3 |
| ---- | ---- | ---- |
| 123 | 1 | 0 |
您可能已经猜到,对于任何尝试转换为整数的字符串,
结果是一个整数值,该整数值由字符串的起始数字字符组成(如果有的话),否则为0。
因此,在您的情况下,'123sks'
被(隐式地)转换为123
。
要从比较中获取FALSE
,请将123
转换为字符串:
WHERE '123sks' = cast(123 as char(10))