MySQL案例不敏感但强调敏感的UTF8唯一密钥

Eli*_*Eli 5 mysql unicode collation utf-8

我知道SF上有很多类似的问题,但我认为我的不同以保证一个新的问题.我有一个表,其中一个列为utf8,其中包含utf8_unicode_ci.它还在此列上具有唯一键以及标记语言代码的另一列.该列中的数据有许多不同的脚本(拉丁文有各种口音,中文和俄文等).

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

所以,所有这些都说,我需要一些解决方案,它不会影响到达到这一列的许多现有查询中的默认区分大小写,但是我会添加只有变音符号的单词.想法?如果必须的话,我只会将唯一键约束切换到utf8_bin,但我宁愿不要因为我从不想要表中只有两种不同的东西.

jua*_*ala 0

我唯一能想到的(没有找到适合您需求的排序规则)是在应用程序层(MySQL 之外)更改一些内容来处理差异化。

例如,由于您不关心大小写,因此您可以以编程方式执行某些操作来降低数据库中所有行的大小写。然后将排序规则更改为 utf8_bin。

然后,您可以在应用程序中,在进入数据库之前将所有内容转换为小写(我猜这不会影响变音符号)。这样,如果人们尝试输入多种情况,您仍然会收到错误,您只需更改几行代码即可预先确定输入表中的内容,并且不会遇到变音符号问题。