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