我有一个名为tag的表,在name列上有一个唯一约束:
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。我一直试图弄清楚这一段时间现在无济于事。有谁知道我做错了什么?哦,只是说明显了。该条目已不存在于表中。
答案 0 :(得分:2)
排序规则utf8_unicode_ci
不区分大小写且不区分重音,这就是为什么它将'até'
和'ate'
视为重复的原因。 There is no unicode multilingual collation不区分大小写且区分重音。根据您的需要,您可以尝试不同的解决方法。一些相关的问题: