mysql唯一索引報(bào)錯(cuò)信息只顯示前64位

MySQL的報(bào)錯(cuò)信息有時(shí)可能和大家預(yù)期的不一樣,本文將根據(jù)實(shí)際案例演示最常見(jiàn)的唯一索引報(bào)錯(cuò)與預(yù)期情況有差異,不了解的同學(xué)可能以為有bug。
1. 數(shù)據(jù)準(zhǔn)備
1.1 創(chuàng)建一個(gè)含唯一索引的表
--?創(chuàng)建一張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 插入一批數(shù)據(jù)
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','2000000');insert into `test` (`id`, `c1`, `c2`, `c3`, `c4`) values('3','988806443B5534D33B652929F5205E','5b612c194383488fad19e2889cf077f5','202204','1000000');
1.3 插入一條唯一索引沖突的數(shù)據(jù)
INSERT INTO `test` (`id`, `c1`, `c2`, `c3`, `c4`) VALUES('4','90806443B5534D33B652929F5205E4F','5b612c194383488fad19e2889cf077f5','202204',200000);
報(bào)錯(cuò)信息如下:
錯(cuò)誤代碼:1062Duplicate entry '90806443B5534D33B652929F5205E4F-5b612c194383488fad19e2889cf077f5'for key 'uq_c1_c2_c3'
報(bào)錯(cuò)信息中只有c1(90806443B5534D33B652929F5205E4F)和c2(5b612c194383488fad19e2889cf077f5)的值,無(wú)c3(202204)的值,有時(shí)如果批量插入過(guò)多的行時(shí),無(wú)法快速定位哪一行沖突,不便于快速排查問(wèn)題。
2.? 原因探索
從報(bào)錯(cuò)信息中可以發(fā)現(xiàn),c1、c2、'-'連接符總長(zhǎng)度為64個(gè)字符,可以從源碼著手。
在源碼 errmsg-utf8 文件中,可以發(fā)現(xiàn)有如下信息:
eng "Duplicate entry '%-.64s' for key '%-.192s'"
1.??MySQL高可用之MHA集群部署
2.??mysql8.0新增用戶及加密規(guī)則修改的那些事
3.? 比hive快10倍的大數(shù)據(jù)查詢利器-- presto
4. ?監(jiān)控利器出鞘:Prometheus+Grafana監(jiān)控MySQL、Redis數(shù)據(jù)庫(kù)
5.? PostgreSQL主從復(fù)制--物理復(fù)制
6.??MySQL傳統(tǒng)點(diǎn)位復(fù)制在線轉(zhuǎn)為GTID模式復(fù)制



評(píng)論
圖片
表情
