mysql只比较字符串的第一个数字部分到int列的where

时间:2014-01-31 16:45:15

标签: mysql

这更像是“为什么”或“任何指向文档的指针”的问题。

今天我意识到,与INT列相比,WHERE子句中的比较仅占用字符串的第一个数字部分。 (我自己的结论)

例如:

SELECT * FROM companies c WHERE id = '817m5'

仍将返回id = 817的公司。

它确实有意义,但我没有在任何地方找到这个记录,看看我的结论是否正确以及是否还有其他事情要知道这个确切的行为。 WHERE,INT类型,比较文档?哪里?怎么称呼?

谢谢!

1 个答案:

答案 0 :(得分:1)

这是比较:

WHERE id = '817m5'

id是一个整数。

因此,MySQL必须将整数与字符串进行比较。好吧,它不能直接做到这一点。它要么必须将字符串转换为数字,要么将数字转换为字符串。 MySQL将字符串转换为数字,它通过转换前导数字字符来实现。因此,'817m5'变为817

Here是确切的引用:

  

通常,在数字上下文中将字符串转换为数值   除了使用字符串值之外,不必做任何其他事情   虽然它是一个数字:

mysql> SELECT 1+'1'; -> 2