关于数据表中没有重复记录,mysql报Duplicate entry for key “XXX“的错误

问题背景

由于每天都需要对公司的数据进行一个统计,公司工作人员在对账的时候,发现有一天没有查到记录,于是我就把程序统计调整到没有记录的那天重新统计入库。奇怪的事情发生了,数据插入不进去,唯一索引报Duplicate entry for key xxx的错误。

解决过程

  1. 首先我去表中看了,唯一索引的确没有重复
  2. 为了排除其他数据的影响,直接将表中数据清空了(当然是本地环境),依然报错
  3. 打断点,输出,对重复的那个key进行debug,看数据统计是否有有重复的,控制台指打印出一次,debug也只停留一次。

进行上面三个操作之后,并没有任何卵用,这就让我很纳闷了。虽然我们进行插入之前可以判断是否已经存在该条记录,存在就不入库,不存在就入库,但这显然不是根本原因所在。程序没有看到任何问题,接下来就只能直接操作数据库,进行查询了。报的是唯一索引重复了,我就查询那个唯一索引,好家伙,神奇的事情发生了。

我查询的是全部小写的字符串"titapotp",结果如下图所示:
在这里插入图片描述
这里问题的根本原因就自己出来了,mysql查询的时候字符串是不区分大小写的😮‍💨

解决方式

所以解决办法就是查询的时候强制区分大小写。

有以下几个方法解决:

1. 让mysql查询时区分大小写
select * from usertable where binary 字段名=‘xxxx';
2.在建表时加以标识
create table `usertable`( 
 字段名 varchar(32) binary, 
 PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

或者

CREATE TABLE `usertable` ( 
 字段名 varchar(32) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '', 
 PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

因为我的表已经是建立的了,不必去删除重建,所以只要将account那个字段改为二进制即可。

平时使用的数据库可视化工具navicat居多,所以我直接在navicat进行如下操作:
在这里插入图片描述
直接勾选二进制即可,这样查询的时候会强制区分大小写了。还有一种就是将排序规制设置为二进制的,如下图所示:
在这里插入图片描述

其实两个都是一样的,勾选为二进制点击保存之后排序规则直接变成了二进制的。如下图示:
在这里插入图片描述
进行如下操作之后,再次查询就OK了。

在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值