MySQL 数据库版本 5.6
数据库表 A 有自增主键 id 和 name 字段,由于历史原因,从前台传过来的字符串会先用来执行 SQL1:
select * from A where name = 'str'
如果查不到数据再执行 SQL2:
select * from A where id = 'str'
本来,这个 str 要么是非数字字串要么是纯数字字串。但是后来扩展业务时,这个 str 取的是用户设置的值,例如用户输入的是'123Test'。
SQL1 查不出来,执行 SQL2 时,发现数据库会将 str 的数字部分截出来作为条件查,即变成
select * from A where id = '123'
我其实是想知道数据库是不是故意这样设计的,还是说只是单纯没想到开发者会这样使用 SQL。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.