MySQL 不区分大小写但区分重音 UTF8 唯一键

标签 mysql unicode utf-8 collation

我知道 SF 上有很多类似的问题,但我认为我的问题足够不同,值得提出一个新问题。我有一个表,其中有一个列作为 utf8 和 utf8_unicode_ci。它还在此列上有一个唯一的键以及标记语言代码的另一列。列中的数据采用多种不同的文字(带有不同口音的拉丁文、中文和俄文等)。

问题是有时我会想输入两个具有不同含义的单词,这些单词的区别仅在于变音符号(即西类牙语 ano 与 año)。由于 utf8_unicode_ci 不区分大小写和重音,它认为这些是相同的,只会让我输入一个。太糟糕了。理想情况下,我只是将整个列切换到一些不区分大小写但区分重音的排序规则,但这似乎不存在。许多不同的东西都使用这个列,所以我宁愿不将列的默认排序规则更改为 utf8_bin,以免因区分大小写而弄乱东西。

综上所述,我需要一些解决方案,既不会影响命中此列的许多现有查询中的默认大小写敏感性,又能让我添加仅区别于变音符号的词。想法?如果必须的话,我会只将唯一键约束切换为 utf8_bin,但我宁愿不这样做,因为我从不希望表中的两个东西只是大小写不同。

最佳答案

您不必在这里重新发明漏气的轮胎(重新发明车轮)。

MySQL 中有两种西类牙语排序规则:

utf8_spanish_ci(现代西类牙语)和 utf8_spanish2_ci(繁体西类牙语)

他们非常了解该语言,知道 N 和 n 应该放在一起,但 Ñ 和 ñ 是 N 和 O 之间的不同字母。在西类牙语中,Ñ 实际上是不同的字母,而不是重音符号。

将您的列排序规则设置为 utf8_spanish_ci,一切都会按您想要的方式工作。

关于MySQL 不区分大小写但区分重音 UTF8 唯一键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11005647/

相关文章:

swift - 将 Swift 字符串编码为转义的 unicode?

python - 如何有效地对utf-8编码的文件进行切片

PHP、mysql编码UTF-8

php - 如何将PHP数组转换成Mysql资源

java - MySQL 连接不适用于 HikariCP

mysql - 使用带有连接表的 Django-Rest-Framework 创建 API

python - 如何在 Python 中将\xXY 编码的字符转换为 UTF-8?

python 3 : Demystifying encode and decode methods

MySQL 的 UTF-8 字符支持

php - 从表中选择,其中 a 列不等于 b 列(在同一个表上)且 tableID = 2