求助,mysql查找问题!!!

white_ice 2016-08-17 10:22:09
mysql数据库,我查找语句是 select * from table where pd_id = ? ,pd_id是varchar类型的,不是主键,表中有一条数据的pd_id是21748138273,我偶然发现用21748138273?error=001也能找到,为什么???下面是我测试的结果,使用21748138273a查找!
id:21748138273a找到的产品:{ligth_list=[Ljava.lang.String;@5b9da04c, pd_stars=null, status_id=3, least_price=0.0, pd_limit_num=22, user_reg_id=87190789864, pd_name=222, pd_id=21748138273a, pd_main_pic=superweekend/20160816/1471328138252993.jpg, pd_publish_date=2016-08-16 14:15:38.0, pd_light=233, super_collectors=0, pd_pic=null, start_time=[{pd_begin_time=2016-08-17 00:30:00.0}], rec_user_reg_id=87190789864, suit_id=0, pd_address=中国111, pd_dis=<p>222</p>}
...全文
109 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
中国风 2016-08-17
  • 打赏
  • 举报
回复
没有关闭这功能,你只能用#8方法,或在传参时验证是否为数字 这样的功能不能用好坏去区分,利弊都存在.
white_ice 2016-08-17
  • 打赏
  • 举报
回复
引用 10 楼 roy_88 的回复:
这个的效果利弊都存在,就看你怎样用。
我错了,我的pd_id是bigint类型的不是varchar类型,是不是强转时自动截取字符串以后的数据,前面我说错了
中国风 2016-08-17
  • 打赏
  • 举报
回复
这个的效果利弊都存在,就看你怎样用。
white_ice 2016-08-17
  • 打赏
  • 举报
回复
引用 7 楼 roy_88 的回复:
[quote=引用 6 楼 white_ice 的回复:]
数字 & 字符串比较时 数字类型 优先于 字符串 会隐性转换把字符串转为数字再比较 上面语句就是字符串为数字时1a=1,自己运行一下看效果[/quote]我有点懂了,而且我刚才试了下,将id为11改成11AA时成功之后是11,如果改成1aa1时成功之后是1,这种如何关闭它,谢谢
中国风 2016-08-17
  • 打赏
  • 举报
回复
select * from `table` where convert(pd_id using utf8) = '25A';--你可这样用
中国风 2016-08-17
  • 打赏
  • 举报
回复
引用 6 楼 white_ice 的回复:
数字 & 字符串比较时 数字类型 优先于 字符串 会隐性转换把字符串转为数字再比较 上面语句就是字符串为数字时1a=1,自己运行一下看效果
white_ice 2016-08-17
  • 打赏
  • 举报
回复
引用 5 楼 roy_88 的回复:
这属性隐性,类型优先级 转换 select cast('1a' as signed);
能说的在再详细点吗,大哥
中国风 2016-08-17
  • 打赏
  • 举报
回复
这属性隐性,类型优先级
转换
select cast('1a' as signed);
white_ice 2016-08-17
  • 打赏
  • 举报
回复
引用 3 楼 KanzakiOrange 的回复:
是啊, ='21748138273AAAAA' 实际上 和 '21748138273?' 并没有区别,遇到A和?就截断数字了,所以判定就是 21748138273 ,所以能查到
好吧,感觉太奇怪了哈
Ginnnnnnnn 2016-08-17
  • 打赏
  • 举报
回复
是啊, ='21748138273AAAAA' 实际上 和 '21748138273?' 并没有区别,遇到A和?就截断数字了,所以判定就是 21748138273 ,所以能查到
white_ice 2016-08-17
  • 打赏
  • 举报
回复
引用 1 楼 KanzakiOrange 的回复:
估计mysql 在判断这个= 的时候,会有转换处理,遇到非数字的字符就会截断什么的。
我用21748138273AAAAA也能找到啊???
Ginnnnnnnn 2016-08-17
  • 打赏
  • 举报
回复
估计mysql 在判断这个= 的时候,会有转换处理,遇到非数字的字符就会截断什么的。
white_ice 2016-08-17
  • 打赏
  • 举报
回复
引用 12 楼 roy_88 的回复:
没有关闭这功能,你只能用#8方法,或在传参时验证是否为数字 这样的功能不能用好坏去区分,利弊都存在.
谢谢耐心的回答

22,207

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧