我正在尝试改进一个旧系统(很久以前写的),其中每个 mysql 查询都是从字符串粘合而来的。所以该查询的示例看起来像
"SELECT * FROM User WHERE id > '3'"
Id列当然是bigint和PK。
mysql 在 id 应该是 int 值的查询中对 '3' 做了什么?我假设它被视为一个字符串(由于'')所以这个值在mysql的分析/优化过程中被转换为int。我对吗?
//更新 我可能问错了方式。有两种处理方式。
(快速)Mysql 自动检测到 id 应该是 int 并将查询重写/转换为
SELECT * FROM User WHERE id > 3
在将其发送到数据库引擎之前
(难以置信)Mysql 可以
SELECT * FROM
然后在循环中应用条件 WHERE id > '3' 并将其转换为每一行
我只是想确定第二种选择是不可能的。
最佳答案
MySQL 总是会将字符串转换为数字以进行比较,在本例中这是正确的做法(它将使用列上的索引来查找值)。
如果您的列是一个字符串并且您将它与一个整数常量进行比较,MySQL 会将列转换为一个整数并且不使用索引。
关于php - Mysql类型隐藏类型转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11696402/