【问题标题】:Duplicate unicode entry error on the unique column - mysql [duplicate]唯一列上的重复 unicode 条目错误 - mysql [重复]
【发布时间】:2017-04-26 06:28:17
【问题描述】:

我有一个表 Labels 有 2 列:

+-------------+--------------+-------------+
| Column Name |     Type     |     Key     |
+-------------+--------------+-------------+
| id          | integer      | primary key |
| label       | varchar(255) | unique      |
+-------------+--------------+-------------+

在这张表中,我已经有如下记录: id: 1, label: 'café'

现在我想添加更多记录,如下所示: id: auto, label: 'cafe'

但是当我尝试插入时,出现重复错误

(1062, "Duplicate entry 'cafe' for key 'label_2'") [SQL: u'INSERT INTO vocabulary (label) VALUES (%s)'] [parameters: (u'cafe',)]

在这种情况下你们能帮帮我吗? 关于我的数据库的更多信息:字符集:utf8,整理:utf8mb4_unicode_ci

更新:创建表

CREATE TABLE `labels` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `label` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `label_2` (`label`),
  KEY `label` (`label`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

【问题讨论】:

  • 如果您的 Python 代码没有正确地将 UTF-8 数据发送到 MySQL,这可能比这更复杂。
  • 绝对不是,我已经尝试执行原始 MySQL 查询 INSERT INTO labels (label) VALUES ("cafe"); => 相同的错误
  • 你能和我们分享一下你桌子的CREATE TABLE吗?
  • @GiorgosBetsos:更新
  • 这是COLLATE 用于列的问题。显然使用默认排序规则并不能帮助数据库服务器区分eé。检查下面给出的答案指向正确的方向(不知道为什么它被否决!)。

标签: python mysql unicode


【解决方案1】:

只要label 是唯一键,您就不能在该列中插入重复值。 因为你想区分 cafécafe 然后你需要使用 utf8_bin collat​​ion 。 试试下面的查询。

ALTER TABLE labels CHARACTER SET utf8 COLLATE utf8_bin;
ALTER TABLE labels CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;

希望这会有所帮助。

【讨论】:

  • 我认为cafecafé 不同。它不是重复的
  • @VũTuấnAnh 正如蒂姆所说,这是由于 UTF-8 编码。您必须检查一次。
  • 别这么认为,这与 Python 向 MySQL 发送数据无关。我已经尝试从命令行执行原始 MySQL 查询
  • 就是这样!它也对我有用。
  • @VũTuấnAnh,你是对的。不幸的是,重要的不是 的想法,而是MySQL 的想法。在几个排序规则中,“è”和“e”被认为是相同的。
猜你喜欢
  • 1970-01-01
  • 2013-05-05
  • 2016-07-14
  • 1970-01-01
  • 1970-01-01
  • 2019-02-23
  • 2011-09-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多