php - 违反完整性约束 : 1062 Duplicate entry for utf8_unicode_ci collation

标签 php mysql utf-8 doctrine-orm

我有一个名为 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/

相关文章:

php - 正则表达式。如何在一行中处理所有 HTML 标签?

php - Macroable.php 第 74 行 : Method save does not exist. Laravel 5.2 中的 BadMethodCallException

mysql - 使用正则表达式进行 SQL 查询

mysql - WordPress WooCommerce 删除具有重复 SKU 的项目

encoding - 在 Sublime Text 3 中将文件编码设置为带 BOM 的 UTF8

visual-studio - 如何更改 csharp 项目(Visual Studio/MSBuild 机器)中的源文件编码?

php - Sql 整理出 "viral"主题(阅读次数最多的新主题)

php - Symfony 自动服务加载失败并显示 "Class does not exist"

mysql - 日期列(数据类型 -timestamp)未从 csv 正确导入到 MySql

java - 无法在 Apache Jena 生成的 XML 中显示 UTF-8 编码