数据库给自增 id 前加 00000000 也能正常查询,这种情况何解?发现 V 站也是这样

2020-11-11 00:21:12 +08:00
 veike
2638 次点击
所在节点    程序员
13 条回复
veike
2020-11-11 00:21:49 +08:00
fangcan
2020-11-11 00:23:34 +08:00
应该是直接被转了吧
veike
2020-11-11 00:26:57 +08:00
@fangcan 不转直接在数据库也能查询。
xiangyuecn
2020-11-11 00:27:48 +08:00
够骚的,数据库全用字符串可解😂 几乎所有语言都是将前面的 0 丢弃转成 10 进制,包括 sql,"000123"==123,"000123"!="123",迟早要脑瘫
veike
2020-11-11 00:30:12 +08:00
@xiangyuecn 发现在数据库使用不带引号的还是当做 int 来处理,只有加引号才正常。
zealic
2020-11-11 00:32:16 +08:00
Number.parseInt("000000123") = 123

所有语言都一样
CEBBCAT
2020-11-11 00:35:39 +08:00
数据库那边,应该和填充 0 这个概念有关系吧,编程语言不知道
cheng6563
2020-11-11 01:12:44 +08:00
编程语言首先会经历一次 string 转 int 吧,这个时候把前面的 0 给干掉了吧
aqqwiyth
2020-11-11 01:52:45 +08:00
反反爬虫的好思路之一, 如果根据 url path 来的话
freakxx
2020-11-11 02:06:28 +08:00
@aqqwiyth #9

这个思路确实很好玩,类似在 key 做混淆
但是感觉还是容易被针对,跟着写一个转换就可以
lxk11153
2020-11-11 10:24:48 +08:00
何解? 意思是不想让它查出来?那用字符串比较呗
select * from table where CONVERT(id, CHAR) = 传入字符串
ytmsdy
2020-11-11 12:33:54 +08:00
可能是为了防止 SQL 注入,把参数就固定成了 Int,接收到 String 参数以后的第一件事情就是转换成 Int 。
opengps
2020-11-11 13:27:41 +08:00
因为 id 是数字,正式执行查询的时候,被强制转化了

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

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

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

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

© 2021 V2EX