<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"> <path stroke-linecap="round" d="M5,0 0,2.5 5,5z" id="raphael-marker-block" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></path> </svg> <h4>问题背景</h4>
讯享网
由于每天都需要对公司的数据进行一个统计,公司工作人员在对账的时候,发现有一天没有查到记录,于是我就把程序统计调整到没有记录的那天重新统计入库。奇怪的事情发生了,数据插入不进去,唯一索引报Duplicate entry for key xxx的错误。
解决过程
- 首先我去表中看了,唯一索引的确没有重复
- 为了排除其他数据的影响,直接将表中数据清空了(当然是本地环境),依然报错
- 打断点,输出,对重复的那个key进行debug,看数据统计是否有有重复的,控制台指打印出一次,debug也只停留一次。
进行上面三个操作之后,并没有任何卵用,这就让我很纳闷了。虽然我们进行插入之前可以判断是否已经存在该条记录,存在就不入库,不存在就入库,但这显然不是根本原因所在。程序没有看到任何问题,接下来就只能直接操作数据库,进行查询了。报的是唯一索引重复了,我就查询那个唯一索引,好家伙,神奇的事情发生了。
我查询的是全部小写的字符串“titapotp”,结果如下图所示:

讯享网
这里问题的根本原因就自己出来了,mysql查询的时候字符串是不区分大小写的😮💨
解决方式
所以解决办法就是查询的时候强制区分大小写。
有以下几个方法解决:

1. 让mysql查询时区分大小写
讯享网
2.在建表时加以标识
或者
讯享网
因为我的表已经是建立的了,不必去删除重建,所以只要将account那个字段改为二进制即可。
平时使用的数据库可视化工具navicat居多,所以我直接在navicat进行如下操作:

直接勾选二进制即可,这样查询的时候会强制区分大小写了。还有一种就是将排序规制设置为二进制的,如下图所示:

其实两个都是一样的,勾选为二进制点击保存之后排序规则直接变成了二进制的。如下图示:

进行如下操作之后,再次查询就OK了。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/147031.html