mysql查询结果正确_mysql查询结果不正确的问题

当在SQL查询中处理字符串字段时,未正确引用数值可能导致隐式类型转换,这在某些情况下可能会返回多个结果。例如,一个原本应唯一订单编号的查询出现了重复结果,原因可能是数值转换过程中发生了截断。不加引号的查询会先进行全表扫描再转换,影响性能,并可能导致未预期的匹配。为避免这类问题,应确保字符串字段在查询时始终加引号,并注意字段长度以防止数据截断。
摘要由CSDN通过智能技术生成

bVyJT4

我大多的订单查询都按第一条sql语句查询的方式进行查询,查询订单结果都是唯一;但是到了这个订单,就出现了两条查询结果,这是什么原因?正常情况下,字段属性为字符串的,数值不是加不加引号都是一样的吗? 请大侠指点

用第一条sql语句查询出来的结果

bVyLj1

回复内容:

bVyJT4

我大多的订单查询都按第一条sql语句查询的方式进行查询,查询订单结果都是唯一;但是到了这个订单,就出现了两条查询结果,这是什么原因?正常情况下,字段属性为字符串的,数值不是加不加引号都是一样的吗? 请大侠指点

用第一条sql语句查询出来的结果

bVyLj1

当然不一样,mysql会进行隐式类型转换,当比较数字和varchar时,mysql会把varchar转换为数字,假如 password 类型为字符串,查询条件为 int 0 则会匹配上,通过show warnings;查看

把你查询的结果贴出来看看,我也很好奇啊

你的varchar是多少位的 是不是长度不够 后面的引号被自动忽略了?

out_trade_no 确定都是 数字字符,是吧? 可能是 数值太大,在进行隐式类型转换的时候,被截取了一部分,造成 匹配时 ,数据多了一条,提醒你 ,在写SQL 要注意的事项,字符串 数据类型该加 引号的就加,免得不必要的漏洞出现

应该是varchar转数字截断了。

不加引号会导致mysql先全表查询扫描,然后把查询到的结果一条条varchar转换为数字。

加了单引号类型匹配,直接使用索引扫描(如果列上有索引)。

所以不加引号还会导致性能问题。

f68f2add0b68e4f9810432fce46917b7.png

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值