这更像是一个“为什么”或“任何指向文档的指针”问题。
今天我意识到,如果与 INT 列进行比较,WHERE 子句中的比较仅采用字符串的第一个数字部分。 (我自己的结论)
例如:
从公司 c 中选择 * WHERE id = '817m5'
仍将返回 id = 817 的公司。
这确实有道理,但我无法在任何地方找到此记录,以查看我的结论是否正确以及是否还有关于此确切行为的其他信息需要了解。 WHERE
,INT 类型,比较文档?在哪里?怎么称呼?
谢谢!
最佳答案
这是比较:
WHERE id = '817m5'
并且id
是一个整数。
因此,MySQL 必须将整数与字符串进行比较。嗯,它不能直接这样做。它要么必须将字符串转换为数字,要么将数字转换为字符串。 MySQL 通过转换前导数字字符将字符串转换为数字。因此,'817m5'
变为 817
。
Here是准确的报价:
To cast a string to a numeric value in numeric context, you normally do not have to do anything other than to use the string value as though it were a number:
mysql> SELECT 1+'1'; -> 2
关于mysql 仅将字符串的第一个数字部分与 int 列进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21485430/