mysql 仅将字符串的第一个数字部分与 int 列进行比较

标签 mysql

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

今天我意识到,如果与 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/

相关文章:

php - 在 PHP 中选择 MySQL 时出现问题

MySQL UDF sys_exec() 不工作

mysql - mysql 外键空时是否会发生连接

php - pdoException不输出错误

mysql - 如何将以下 sql 查询转换为 HQL 查询

javascript - 如何在 javascript 验证失败时不运行 php 脚本?

mysql - MySQL 可以强制执行全局 WHERE 子句和/或它们是否存在?

mysql - 即使 2 条记录具有相同的时间戳也获取最新条目

mysql - SQL插入如果缺少值

mysql - 获取mysql中所有输出的单个值和总和