首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在MySQL中使用字符串查询Int字段的奇怪行为

在MySQL中使用字符串查询Int字段的奇怪行为
EN

Stack Overflow用户
提问于 2020-11-26 12:35:40
回答 1查看 25关注 0票数 0

使用MySQL 5.5.60。

在Mysql中运行select查询时,我遇到了一些奇怪的行为。我有一个表list,它的模式如下:

代码语言:javascript
运行
复制
+-----------------------+--------------+------+-----+-----------------+----------------+
| Field                 | Type         | Null | Key | Default         | Extra          |
+-----------------------+--------------+------+-----+-----------------+----------------+
| list_id               | int(11)      | NO   | PRI | NULL            | auto_increment |
| vendor_id             | int(11)      | NO   | MUL | NULL            |                |
| referrer_id           | int(11)      | NO   |     | 0               |                |
...

如果我运行这个查询

代码语言:javascript
运行
复制
mysql> select * from list where list_id = "1946"\G

一切正常运行,并返回id为1946的列表。这就是它变得奇怪的地方。如果我将查询更改为如下所示:

代码语言:javascript
运行
复制
mysql> select * from list where list_id = "1946dhkdf"\G  

它仍然返回list 1946!显然,MySQL以某种方式摆脱了dhkdf部分,只使用了1946部分。那么,它是否会尝试将该值转换为Integer呢?那么为什么这个查询返回空集呢?

代码语言:javascript
运行
复制
mysql> select * from list where list_id = "xq1946dhkdf"\G 

我似乎找不到任何可以解释这种行为的文档。有人能解释一下吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-26 12:45:41

您可以看到MySQL的一些复杂的强制转换规则在这里起作用。当尝试将整型列与字符串文字进行比较时,必须将其中一个转换为整型,或者将另一个转换为字符串。在这种情况下,MySQL将尝试将字符串转换为整数,以匹配列的类型。但是,在这种情况下,它不能将整个字符串转换为整数,因为它包含字符。因此,强制转换规则生效,该规则规定,如果字符串的前N个字符是数字,则只使用该前导数字。因此,以下查询的结果是:

代码语言:javascript
运行
复制
select * from list where list_id = "1946dhkdf";

将返回与以下相同的结果集:

代码语言:javascript
运行
复制
select * from list where list_id = "1946";
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65016165

复制
相关文章

相似问题

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