Mysql 更改排序规则字段会导致唯一约束失败

Mysql 更改排序规则字段会导致唯一约束失败,mysql,Mysql,尝试使用以下内容更改我的表格时: ALTER TABLE segment_item CHANGE value value VARCHAR(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL; 我遇到了唯一的约束冲突: MySQLIntegrityConstraintViolationException: Duplicate entry for key 'segment_id' 为什么会这样?对表的更改并不是添加

尝试使用以下内容更改我的表格时:

ALTER TABLE segment_item
CHANGE value value VARCHAR(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL;
我遇到了唯一的约束冲突:

MySQLIntegrityConstraintViolationException: Duplicate entry for key 'segment_id'
为什么会这样?对表的更改并不是添加新记录,而是更改现有记录的字符集和排序规则。为了获得完整的可视性,以下是表的结构:

CREATE TABLE `segment_item` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `value` varchar(100) COLLATE latin1_bin DEFAULT NULL,
  `segment_id` binary(16) DEFAULT NULL,
  `item_order` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `segment_id` (`segment_id`,`value`),
  KEY `value` (`value`),
  CONSTRAINT `segment_item_ibfk_1` FOREIGN KEY (`segment_id`) REFERENCES `segment` (`segment_id`)
) ENGINE=InnoDB AUTO_INCREMENT=36484 DEFAULT CHARSET=latin1 COLLATE=latin1_bin

排序规则是数据库引擎确定记录何时唯一的方式。看起来您正在从二进制排序规则(当且仅当字符串的字节唯一时,字面上是唯一的)更改为不区分大小写的unicode(不区分大小写,但也使用标准转换列表来规范化有向图、码点顺序等)

例如,以下两个字符串在更改之前是唯一的(é是有效的拉丁语-1):

但在改变之后,它们将被认为是相同的。我猜你至少有两个“值”。。。呃。。。在新排序规则下不再唯一的值

Beyoncé
beyonce