gpt4 book ai didi

mysql - 更改字段上的排序规则导致 UNIQUE 约束失败

转载 作者:行者123 更新时间:2023-11-29 02:38:39 26 4
gpt4 key购买 nike

当试图改变我的表时:

ALTER TABLE segment_item
CHANGE value value VARCHAR(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL;

我遇到了 UNIQUE 约束冲突:

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(不区分大小写,但也使用标准转换列表来标准化二合字母,代码点订单等)。

因此,例如,在您更改之前,以下两个字符串曾经是唯一的(é 是有效的 Latin-1):

Beyoncé
beyonce

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

关于mysql - 更改字段上的排序规则导致 UNIQUE 约束失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58294202/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com