首页 > 解决方案 > MySQL utf8_unicode_ci 将不同的字符视为相同

问题描述

在瑞典语中,我们有三个没有出现在标准英文字母表中的字符。这些字符是 Å (å)、Ä (ä) 和 Ö (ö)。我正在尝试填充其中一列具有“唯一”约束的数据库。当试图将两个值添加到该列中,其中值的唯一区别是一个具有“a”而一个具有“ä”,我得到重复错误。这是我的代码:

CREATE DATABASE IF NOT EXISTS hulan;
ALTER DATABASE hulan CHARACTER SET utf8 COLLATE utf8_unicode_ci;
USE hulan;

CREATE TABLE IF NOT EXISTS members (
    id INT AUTO_INCREMENT PRIMARY KEY NOT NULL UNIQUE,
    firstname VARCHAR(100) NOT NULL,
    lastname VARCHAR(100) NOT NULL,
    abbreviation VARCHAR(5) NOT NULL UNIQUE
);

INSERT INTO members (firstname, lastname, abbreviation) VALUES
    ("Martin", "Björling", "MaB"),
    ("Märta", "Björling", "MäB");

你可以看到abbreviation上面的列在我的两行中有几乎相同的值,唯一的区别是前面提到的“a”和“ä”。我得到的错误是:

Error Code: 1062. Duplicate entry 'MäB' for key 'abbreviation'

我认为在数据库上设置 COLLATION 可以解决这个问题,并且最通用的排序规则是utf8_unicode_ci,但显然我错了。

我怎样才能解决这个问题?

标签: mysqlutf-8special-characterscollation

解决方案


推荐阅读