1

我正在尝试改进一个旧系统(很久以前写的),其中每个 mysql 查询都是从字符串粘合的。所以那个查询的例子看起来像

"SELECT * FROM User WHERE id > '3'"

id 列当然是 bigint 和 PK。

mysql 在 id 应该是 int 值的查询中对 '3' 做了什么?我假设它被视为一个字符串(由于'')所以这个值在mysql的分析/优化过程中被转换为int。我对吗?

//更新我可能问错了方式。有两种处理方法。

  1. (快速)Mysql 自动检测到 id 应该是 int 并将查询重写/转换为

     SELECT * FROM User WHERE id > 3
    

    在将其发送到数据库引擎之前

  2. (难以置信)Mysql 确实

    SELECT * FROM
    

    然后在循环中应用条件 WHERE id > '3' 并将其转换为每一行

我只是想确定第二种选择是不可能的。

4

2 回答 2

1

MySQL 会自动将其转换为正确的列类型。如果由于某种原因不能,它将引发错误。

在参数可能来自不安全来源(用户、外部 API)的任何情况下,请确保使用 PDO 或 MySQLi 准备好的语句。

于 2012-07-27T22:23:32.417 回答
1

MySQL 总是将字符串转换为一个数字进行比较,在这种情况下这是正确的做法(它将使用列上的索引来查找值)。
如果您的列是一个字符串,并且您将它与一个整数常量进行比较,MySQL 会将列转换为一个整数并且不使用索引。

于 2012-07-27T22:31:59.067 回答