Mysql int 字段 字符串比较查询的一个问题

2020-12-11 12:42:11 +08:00
 SjwNo1
+---------------+--------------+------+-----+---------+----------------+
| Field         | Type         | Null | Key | Default | Extra          |
+---------------+--------------+------+-----+---------+----------------+
| id            | int(32)      | NO   | PRI | NULL    | auto_increment |
| created_at    | datetime     | NO   |     | NULL    |                |
| updated_at    | datetime     | NO   |     | NULL    |                |
| name          | varchar(64)  | NO   |     | NULL    |                |
+---------------+--------------+------+-----+---------+----------------+
*************************** 1. row ***************************
           id: 1
   created_at: 2020-10-29 08:48:28
   updated_at: 2020-10-29 08:48:28
         name: 文件夹 1
2112 次点击
所在节点    MySQL
8 条回复
l00t
2020-12-11 12:44:04 +08:00
看你高兴啊。
SjwNo1
2020-12-11 12:47:11 +08:00
@l00t 这好像在业务校验中蛮重要的,需要检是否是纯数字
l00t
2020-12-11 12:51:09 +08:00
@SjwNo1 #2 业务是你们的业务,你们认为重要就校验,你们认为不重要就不校验。ID 在前端是否可以输入,以及是否可以输入 1aaaa, 以及输入 1aaaa 时应当是个怎样的行为表现,这是你们定义的,不需要问别人。
HENQIGUAI
2020-12-11 12:51:34 +08:00
如果是强类型语言,id 的类型是对应的 int 或者 Integer, 就不会有这种问题,要校验也只是校验枚举或者判空。让 MySQL 帮你做这种徒劳无意义的转换,我认为不应当。
zyyzj
2020-12-11 13:13:04 +08:00
数据库层执行的命令,最好是明确无误的。如果要匹配查询 ,就明确用 like 之类的运算符。
参数校验应该在业务层中完成。
像上面示例中的,一个 int 型字段,查询用了""字符型的值,可以当作程序的 BUG 对待。
edk24
2020-12-11 13:40:15 +08:00
我自己的一个猜想,mysql遇到这种答非所问会根据字段的类型对对比值进行转换

很明显的一个类型转换操作,1 gggg 可以转换成1

但 ggg1 是不能转换为1的; 我觉得不需要过分担忧,毕竟自己在业务设计时就不应该让它出现这种情况
ben1024
2020-12-11 13:46:41 +08:00
这个要通过数据库是否开启严格验证影响
SjwNo1
2020-12-11 14:18:00 +08:00
@edk24 刚刚在业务加了判断,之前疏忽了

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

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

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

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

© 2021 V2EX