php - mysql查询结果不正确的问题
PHP中文网
PHP中文网 2017-04-11 09:01:04
[PHP讨论组]

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

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

PHP中文网
PHP中文网

认证高级PHP讲师

全部回复(5)
PHP中文网

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

巴扎黑

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

天蓬老师

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

PHP中文网

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

PHPz

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

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号