php - Mysql类型隐藏类型转换

标签 php mysql

我正在尝试改进一个旧系统(很久以前写的),其中每个 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' 并将其转换为每一行

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

最佳答案

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

关于php - Mysql类型隐藏类型转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11696402/

相关文章:

mysql - 如何在 MySQL 中最好地存储 512 位数据对象

c# - 如何获取 mysql 表的一些额外信息描述

javascript - 如何使用 htaccess 从 php 渲染某些 javascript 文件

php - 在 MySQL 查询中使用 PHP 函数

MySQL查询来自2张表的困惑

mysql - 在mysql中选择非字母记录

php - 如何在一个表中连接具有多行的两个表?

PHPUnit 给我 autoload.php not found 异常

php - 如何使用 volley 删除 recyclerview 中的项目?

php - 如何从 Node.js 调用 PHP Web 服务