我正在运行以下查询
SELECT * FROM `student` WHERE '123sks'=123
它的回归真实,我很困惑为什么?
我正在使用5.7.24 - MySQL社区服务器(GPL)
如果我想将'123sks'与123进行比较,我该怎么办才会导致错误。
来自: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))