前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MYSQL的奇怪问题:varchar与数值比较

MYSQL的奇怪问题:varchar与数值比较

作者头像
CainGao
发布2020-06-02 17:14:13
3.1K0
发布2020-06-02 17:14:13
举报
文章被收录于专栏:指尖数虫指尖数虫

我在工作中很少遇到所谓的‘奇怪的问题’。所以对于‘奇怪的问题’我还是很期盼的,可能很早的时候就被某些XX开发规范给限制住了,也就很少遇到这些所谓的奇怪的问题。所以严格来说 XXX开发规范 还是很靠谱的。

事件起源

好了来说具体场景,被同事叫去看一个奇怪的SQL。SQL语句很简单,大概就是查询某些字段有一些查询条件而已。其中比较重要的一个条件就是 「where xx!=0」。说是很奇怪,为什么!=0就查询到的结果就是10条。但是!=1 查询出来的结果就是100条。

代码语言:javascript
复制
SELECT A,B,C FROM TABLE WHERE A!=0
res:10 
SELECT A,B,C FROM TABLE WHERE A!=0
res:100

下面我们简单的来几条数据看一下状况。

状况复现

「所有数据」

「!=0」

当时就是直接拿到了这样的结果。

分析状况

当时看到这个问题之后我也很惊奇,不等于0 不应该把所有的数据都拿到么。为什么会出现这样的情况呢?

简单考虑了一下,字段的类型为 varchar型,而查询条件给予的是个数值型,那么问题应该就是出现在这里。

数据库在基于查询条件进行检索的时候会如何进行操作呢? 答案就是转换成相同的类型。

那么对于这次的问题是字段转换成int类型还是int转换成varchar类型呢?其实简单的看查询结果就知道了。如果查询条件‘0’转换成了varchar那么就应该获取到全部的数据。但是现在的状况是获取到的数据不够。那结论就是数据库把要查询的字段转换成了数值型。 那么我们把app字段进行转换一下试试。

从结果上我们可以看到 app 转换之后的结果只有 0123asfj 转换成了123,其他都是0。所以在查询条件为 ‘!=0’ 的时候就只能查询到一条结果。

结论

mysql在使用varchar字段查询条件是int类型的时候会把varchar型首先转换为int型进行查询。所以就会出现查询结果与预期不符的情况。另外如果字段类型是varchar型而查询条件使用int类型的话,查询是无法使用索引的,会进行全表的扫描。所以sql语句还是按照标准来写!

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-05-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 指尖数虫 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 事件起源
  • 状况复现
  • 分析状况
  • 结论
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档