【MySQL】主键ID为varchar时根据ID能查询出多条结果

本文最后更新于:2021年12月13日 下午

环境

MySQL服务端: 8.0
客户端: Datagrip 2020.3

问题

使用id作为条件查询时可以查询到多条记录

重现步骤

1、创建t_user表作为实验环境

1
2
3
4
5
-- 创建 t_user 表
create table t_user (
id varchar(255) primary key,
name varchar(255)
);

2、插入多条数据

1
2
3
INSERT INTO t_user (id, name) VALUES ('11058352198752523183739676841462', '马里奥');
INSERT INTO t_user (id, name) VALUES ('11058352198752523183739676841463', '路易吉');
INSERT INTO t_user (id, name) VALUES ('11058352198752523183739676841464', '奇诺比可');

3、查询结果

1
select * from t_user where id = 11058352198752523183739676841463;

结果如下:
查询结果

此时,我们可以看到查询结果是存在3条的。
正常情况下,按ID匹配数据只会存在一条数据。

4、再次验证

那么我们再来插入3条数据

1
2
3
INSERT INTO test_db.t_user (id, name) VALUES ('AFL0O4RBS85A5D3TRM24R0ORIMMI71', '奔奔');
INSERT INTO test_db.t_user (id, name) VALUES ('AFL0O4RBS85A5D3TRM24R0ORIMMI72', '板栗');
INSERT INTO test_db.t_user (id, name) VALUES ('AFL0O4RBS85A5D3TRM24R0ORIMMI73', '奇诺比奥');

再次执行查询操作

1
select * from t_user where id = 'AFL0O4RBS85A5D3TRM24R0ORIMMI72';

结果如下:
查询结果

5、结论

重复的操作,得到不同的结果,可以很明显的两次查询的结果是由于id组成不同的缘故造成

解决方案

修改sql为:

1
select * from t_user where id = '11058352198752523183739676841463';

加引号让mysql认为这是字符串,不再按照数字处理。


本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 协议 ,转载请注明出处!