MYSQL 为何执行 SELECT * FROM tbl WHERE id='1-1',也能搜出来 id=1 的条目?

2015-09-11 10:35:00 +08:00
 heat
RT ,我需要他搜不出 ID=1 的条目才对,这个要怎么解决
2676 次点击
所在节点    问与答
9 条回复
tsunli
2015-09-11 10:51:20 +08:00
id != 1 ?
altchen
2015-09-11 10:57:29 +08:00
id 是 bigint 的吧?为什么要 where 字符类型?应该在程序用正确的类型
996635
2015-09-11 11:08:18 +08:00
要看你的 id 的 类型, 如果不是 varchar 就会有问题
caoyue
2015-09-11 11:30:57 +08:00
@altchen
@996635

其实如果 id 是 int 不是 varchar 这个语句也不会出错的
比如可以试试 select "1-1" = 1 看看结果

我记得 mysql 好像也是有 type conversion 的,可以查查文档
anoymoux
2015-09-11 12:04:53 +08:00
id 是 int 型,'1-1' 被转成了 1
把 id 改成 varchar
zonghua
2015-09-11 12:39:59 +08:00
1-1 是字符
SoloCompany
2015-09-11 13:51:31 +08:00
有毛病啊
‘ 1-1 ’ 强制类型转换成 int ,并且是尽量容错的,就是遇到非数字就终止(减号),结果就是 1
所以你的条件是 id=1
heat
2015-09-11 20:56:51 +08:00
@caoyue
@anoymoux
@SoloCompany 对的, ID 是自增字段,所以是 BIGINT 类型,但是当输入 1-2 , 3-10 这种东西的时候。我希望结果并不等于 ID 1 和 3 。有办法让 MYSQL 强制数据类型么
SoloCompany
2015-09-12 00:37:33 +08:00
@heat 你这是玩 hi 了吧,要是自己用,去掉引号就是了,要是在线上用,你不怕被 SQL 注入玩坏的话可以尽管试试,没有安全意识的话,加引号一样要被玩坏。正确的做法,自己做个四则运算解释器或者找现成的,计算好后再做查询

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/219869

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX