首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mysql型隐式铸造

Mysql型隐式铸造
EN

Stack Overflow用户
提问于 2012-07-27 22:20:23
回答 2查看 215关注 0票数 1

我正在努力改进一个旧的系统(很久以前就写好了),在这个系统中,每个mysql查询都是通过字符串绑定的。因此,该查询的示例如下

代码语言:javascript
复制
"SELECT * FROM User WHERE id > '3'"

Id列当然是bigint和PK。

mysql如何处理查询中的'3‘,其中id应该是int值?我假设它被视为字符串(由于''),因此这个值在mysql分析/优化过程中被抛入int中。我说的对吗?

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

  1. (快速) Mysql自动检测id应该是int,并将查询重写/强制转换到 从用户处选择* id >3 在发送到DB引擎之前
  2. (难以置信) Mysql有 选择*从 然后在循环应用条件中,id > '3‘并对每一行进行强制转换

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-07-27 22:31:59

MySQL总是将字符串转换为一个数字进行比较,在本例中,这是正确的做法(它将使用列上的索引来查找值)。

如果您的列是字符串,并将其与整数常量进行比较,MySQL将将该列转换为整数,而不使用索引。

票数 1
EN

Stack Overflow用户

发布于 2012-07-27 22:23:32

MySQL将自动将其转换为正确的列类型。如果由于某种原因不能这样做,就会抛出错误。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11696402

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档