我有一个名为 tag 的表,对名称列有唯一约束:
CREATE TABLE `tag` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `UNIQ_389B7835E237E06` (`name`)
) ENGINE=InnoDB AUTO_INCREMENT=13963 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
该表的排序规则是 utf8_unicode_ci。当我尝试插入以下 2 个条目时,我收到“完整性约束违规”执行。
SQL日志:
130607 14:35:53 1096 Connect imtpdb@localhost on imtpdb
1096 Query SET NAMES utf8
1096 Query START TRANSACTION
1096 Query INSERT INTO tag (name) VALUES ('até')
1096 Query INSERT INTO tag (name) VALUES ('ate')
1096 Query rollback
1096 Quit
确切的错误消息是:
SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'ate' for key 'UNIQ_389B7835E237E06'
my.cnf:
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
default-character-set = utf8
collation-server = utf8_unicode_ci
init-connect='SET NAMES utf8'
character-set-server = utf8
我正在运行 mysql 5.1.54。我已经尝试解决这个问题有一段时间了,但没有成功。有谁知道我做错了什么?哦,只是为了说明显而易见的事情。表中尚不存在该条目。
最佳答案
排序规则 utf8_unicode_ci
不区分大小写和重音,这就是为什么它将 'até'
和 'ate'
视为重复项。 There is no unicode multilingual collation即不区分大小写且区分重音。根据您的需要,您可以尝试不同的解决方法。一些相关问题:
关于php - 违反完整性约束 : 1062 Duplicate entry for utf8_unicode_ci collation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16994108/