Mysql 查询,字符串的前部分命中数字类型查询

2023-06-16 13:37:44 +08:00
 huisunan

有大佬在知道这是什么情况吗

974 次点击
所在节点    MySQL
4 条回复
LeegoYih
2023-06-16 13:49:28 +08:00
https://stackoverflow.com/questions/51544716/mysql-where-clause-accepting-integer-with-strings-on-primary-key-field
简单的说就是字段是 int 而参数是 str ,MySQL 会自作聪明取前面整数部分。
xianlinYI
2023-06-16 13:59:34 +08:00
mysql 在你使用字符串类型的数据和数字类型的数据做比较时,会自动把所有数据转位数字类型的数据然后比较。分两种情况:
第一种是你的列是数字类型,查询条件是字符串类型,这种情况转化的时候就丢失掉了字母部分,也就是你现在的情况;
第二种情况是你的列是字符串类型,你的查询条件是数字类型,这种情况就会把你的列做一次函数操作转化成数字类型,和你的查询条件做比较,由此造成的问题就是你该列上的索引会失效;

所以你在设计表和设计查询条件是需要考虑 mysql 的数据类型以防止索引失效
huisunan
2023-06-16 14:03:32 +08:00
@LeegoYih 明白了
huisunan
2023-06-16 14:04:05 +08:00
@xianlinYI 明白了,谢谢

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

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

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

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

© 2021 V2EX