如何使用 ASCII 查询 mysql utf-8 table

how-to query mysql utf-8 table using ASCII

我创建了一个 mysql 5.6 table,其中有一列以 utf-8 编码,用于 罗马尼亚语、捷克语、匈牙利语、波兰语、法语、德语、斯堪的纳维亚语的字符 语言 - 即欧洲字符,但完全非 ASCII。

但是,我想仅使用 ASCII 字符查询此列 - 例如在 LIKE 子句中-以便 ă,î,â,ş,Ş,ü,ä,ö 等字符可以(成功)使用 a,e 查询,i,o,u,s,t

这可能吗?

好吧,我认为仅使用 SQL 无法通过任何常规方式实现。 您只能编写查询预处理器,它会自动将 ascii 字符替换为欧洲字符。 https://php.net/manual/en/function.str-replace.php - 假设您使用的是 PHP 但是您仍然需要向它提供每个查询。

我找到了我的问题的部分答案:

如果您为列定义的字符集是utf8_general_ci,那么很多(如果不是全部的话)flavorsa,e,o,u 将通过使用 plain a,e,o,u 的查询找到。 我什至使用 plain n.

在 Woloszyńska 找到了 n

不幸的是,找不到同一个单词中的小写字母 L "with oblique bar"。

该答案由dddd的回答建议here

有一个作弊 sheet 知道什么字母映射 "equal" 在什么排序规则下 utf8 collations 它同意 Ł 没有映射到 L对于任何整理。 general_ci 排在 Z 之后; utf8_unicode_520_ciL 排序;其余的在 M.

之前排序

polish_ciĘ 与其他类似 E 的字符区分开来。 Ą 同上。波罗的海国家倾向于将某些重音辅音分开。

polish_ci中,Ń(十六进制C584)整理在N之后和O之前;其他排序规则将其视为 N.

utf8_unicode_520_ci可能是最适合你的整理。

此外,您可以考虑使用 "combining" 重音符号——其中两个 utf8 'characters' "combine" 组成一个字符。 utf8_unicode_ci 整理了其中大部分的 'correctly',如 here.

所示