Heim  >  Artikel  >  Backend-Entwicklung  >  mysql查询结果不正确的问题

mysql查询结果不正确的问题

WBOY
WBOYOriginal
2016-07-06 13:51:351086Durchsuche

mysql查询结果不正确的问题

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

用第一条sql语句查询出来的结果
mysql查询结果不正确的问题

回复内容:

mysql查询结果不正确的问题

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

用第一条sql语句查询出来的结果
mysql查询结果不正确的问题

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

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

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

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

应该是varchar转数字截断了。
不加引号会导致mysql先全表查询扫描,然后把查询到的结果一条条varchar转换为数字。
加了单引号类型匹配,直接使用索引扫描(如果列上有索引)。
所以不加引号还会导致性能问题。

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn