mysql - 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
,但显然我错了。
我怎样才能解决这个问题?
解决方案
推荐阅读
- delphi - 如何逃脱加速器字符?
- reactjs - Firebase 默认本地持久性状态不起作用
- php - Google Calendar API 错误请求的身份验证范围不足
- scala - Slick 如何按从左连接获得的选项列排序
- android - 使用 jarsigner 在 Azure 管道上签名 Android 包失败,并出现错误“请指定别名”
- path - 如何在主页上设置信息并在单击另一个按钮/链接时触发
- asp.net - asp.net Core 在 UseRouting 之后在中间件中添加响应头
- google-apps-script - 有没有办法在 Google Apps 脚本中每隔几秒调用一次自定义函数?
- sql - 在单个列中针对给定日期返回活动记录与非活动记录计数
- mysql - 在 WHERE 子句中找到重复项时返回?