锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

mysql唯一索引报错信息只显示前64位

时间:2022-08-27 13:30:00 低浓度甲烷传感器gjc4

点击上面的蓝字关注我

8d77dc3c04532810b9627d49d1f55530.png

MySQL的报错信息有时可能和大家预期的不一样,本文将根据实际案例演示最常见的唯一索引报错与预期情况有差异,不了解的同学可能以为有bug。

1. 数据准备

1.1 创建一个包含唯一索引的表

--创建一张test表 CREATE TABLE test (   id INT PRIMARY KEY AUTO_INCREMENT,   c1 VARCHAR (31),   c2 VARCHAR (32),   c3 VARCHAR (8),   c4 INT,   UNIQUE KEY uq_c1_c2_c3 (c1, c2, c3) );

1.2 插入一批数据

insert into `test` (`id`, `c1`, `c2`, `c3`, `c4`) values('1','90806443B5534D33B652929F5205E4F','5b612c194383488fad19e2889cf077f5','202204','1000000'); insert into `test` (`id`, `c1`, `c2`, `c3`, `c4`) values('2','988806443B5534D33B652929F5205E4','077f55b612c194383488fad19e2889cf',202205,200000; insert into `test` (`id`, `c1`, `c2`, `c3`, `c4`) values('3','988806443B5534D33B652929F5205E','5b612c194383488fad19e2889cf077f5',202204,100000;

1.3 插入唯一索引冲突的数据

INSERT INTO `test` (`id`, `c1`, `c2`, `c3`, `c4`) VALUES('4','90806443B5534D33B652929F5205E4F','5b612c194383488fad19e2889cf077f202204年,200000年);

错误信息如下:

错误代码:1062 Duplicate entry '90806443B5534D33B652929F5205E4F-5b612c194383488fad19e2889cf077f5'  for key 'uq_c1_c2_c3'

只有报错信息c1(90806443B5534D33B652929F5205E4F)和c2(5b612c194383488fad19e2889cf077f5)的值,无c3(202204)值,有时如果批量插入过多行,无法快速定位哪一行冲突,不方便快速调查问题。

2. 原因探索

可以从报错信息中找到,c1、c2接符的总长度为64个字符,可从源码开始。

在源码 errmsg-utf8 以下信息可在文件中找到:

eng "Duplicate entry '%-.64s' for key '%-.192s'"

也就是说,报错信息中有64个字符,key这个名字是192个字符,至此揭开了谜底。

过去的精彩回顾

1.MySQL高可用之MHA集群部署

2.mysql8.新用户和修改加密规则的事情

3. 比hive大数据查询利器快10倍-- presto

4. 监控利器出鞘:Prometheus Grafana监控MySQL、Redis数据库

5. PostgreSQL主要从复制-物理复制

6.MySQL传统点复制在线转向传统点复制GTID模式复制

7.MySQL加密和解密敏感数据

8.MySQL数据备份和还原(1)

9.MySQL数据备份和还原(2)

扫码关注

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章