时间:2021-07-01 10:21:17 帮助过:4人阅读
我大多的订单查询都按第一条sql语句查询的方式进行查询,查询订单结果都是唯一;但是到了这个订单,就出现了两条查询结果,这是什么原因?正常情况下,字段属性为字符串的,数值不是加不加引号都是一样的吗? 请大侠指点
用第一条sql语句查询出来的结果
我大多的订单查询都按第一条sql语句查询的方式进行查询,查询订单结果都是唯一;但是到了这个订单,就出现了两条查询结果,这是什么原因?正常情况下,字段属性为字符串的,数值不是加不加引号都是一样的吗? 请大侠指点
用第一条sql语句查询出来的结果
当然不一样,mysql会进行隐式类型转换,当比较数字和varchar时,mysql会把varchar转换为数字,假如 password 类型为字符串,查询条件为 int 0 则会匹配上,通过show warnings;
查看
把你查询的结果贴出来看看,我也很好奇啊
你的varchar是多少位的 是不是长度不够 后面的引号被自动忽略了?
out_trade_no 确定都是 数字字符,是吧? 可能是 数值太大,在进行隐式类型转换的时候,被截取了一部分,造成 匹配时 ,数据多了一条,提醒你 ,在写SQL 要注意的事项,字符串 数据类型该加 引号的就加,免得不必要的漏洞出现
应该是varchar转数字截断了。
不加引号会导致mysql先全表查询扫描,然后把查询到的结果一条条varchar转换为数字。
加了单引号类型匹配,直接使用索引扫描(如果列上有索引)。
所以不加引号还会导致性能问题。