MySQL 不把 ı 当作 i?
MySQL does not treat ı as i?
我在 MySQL 5.7.27 中有一个用户 table,排序规则 utf8mb4_unicode_ci
。
不幸的是,ı 没有像 i 那样线程化,例如,下面的查询将找不到 Yılmaz
select id from users where name='Yilmaz';
我对 ä
和 a
等其他元音变音没有问题。例如,这两个查询给出了完全相同的结果。
select id from users where name='Märie';
select id from users where name='Marie';
我不能简单地将 ı
替换为 i
并进行搜索,因为这样我就找不到名称为 Yılmaz
的用户。
我是否必须使用不同的归类来支持所有元音变音?
以下是有关 unicode 字母的更多信息:
code | glyph |decimal | html | description
U+0131 | ı |305 |ı | Latin Small Letter dotless I
U+0069 | i |105 |- | Latin Small Letter I
参考 http://mysql.rjweb.org/utf8_collations.html ,我在 3 个排序规则中看到 ı=i
:utf8_general_ci、utf8_general_mysql500_ci、utf8_turkish_ci。但是,对于土耳其语排序规则,I=ı
排在其他带重音符号的 I 之前。在所有其他排序规则中,ı
排在所有 I 之后,就好像它被视为一个单独的字母一样。
同时 İ=I
在除 utf8_turkish_ci 之外的所有排序规则中。
情节随着 MySQL 8.0 变厚。 utf8mb4_tr_0900_ai_ci(仅)有此顺序:
I=Ì=Í=Î=Ï=Ĩ=Ī=Ĭ=Į=ı sort before i=ì=í=î=ï=ĩ=ī=ĭ=į=İ
同时 ä=Ä
并且它们与大多数排序规则(包括土耳其语排序规则)的大多数其他带重音符号的 A 相匹配。
底线:似乎 utf8[mb4]_general_ci 是 5.7 或 8.0 中唯一始终将 dotless-i(或 dotted-I)视为等于 'regular i/I 同时忽略变音符号。
警告:"general" 排序规则一次测试的字符不超过一个。也就是说,"non-spacing umlaut"加上元音不会被视为等于组合。
其中 link... 对于某些排序规则,一个字符 æ
与两个字母 ae
的排序相同。表示为:Aa ae=æ az
。在大约一半的其他归类中,字符 æ
被视为单独的字母;这是在 az
之后和 b
之前表示的。甚至在斯堪的纳维亚排序规则 zz
之后。这种单独的字母概念有时适用于字母对,例如 cs
(匈牙利语)和 ch
(繁体西班牙语)。
我在 MySQL 5.7.27 中有一个用户 table,排序规则 utf8mb4_unicode_ci
。
不幸的是,ı 没有像 i 那样线程化,例如,下面的查询将找不到 Yılmaz
select id from users where name='Yilmaz';
我对 ä
和 a
等其他元音变音没有问题。例如,这两个查询给出了完全相同的结果。
select id from users where name='Märie';
select id from users where name='Marie';
我不能简单地将 ı
替换为 i
并进行搜索,因为这样我就找不到名称为 Yılmaz
的用户。
我是否必须使用不同的归类来支持所有元音变音?
以下是有关 unicode 字母的更多信息:
code | glyph |decimal | html | description
U+0131 | ı |305 |ı | Latin Small Letter dotless I
U+0069 | i |105 |- | Latin Small Letter I
参考 http://mysql.rjweb.org/utf8_collations.html ,我在 3 个排序规则中看到 ı=i
:utf8_general_ci、utf8_general_mysql500_ci、utf8_turkish_ci。但是,对于土耳其语排序规则,I=ı
排在其他带重音符号的 I 之前。在所有其他排序规则中,ı
排在所有 I 之后,就好像它被视为一个单独的字母一样。
同时 İ=I
在除 utf8_turkish_ci 之外的所有排序规则中。
情节随着 MySQL 8.0 变厚。 utf8mb4_tr_0900_ai_ci(仅)有此顺序:
I=Ì=Í=Î=Ï=Ĩ=Ī=Ĭ=Į=ı sort before i=ì=í=î=ï=ĩ=ī=ĭ=į=İ
同时 ä=Ä
并且它们与大多数排序规则(包括土耳其语排序规则)的大多数其他带重音符号的 A 相匹配。
底线:似乎 utf8[mb4]_general_ci 是 5.7 或 8.0 中唯一始终将 dotless-i(或 dotted-I)视为等于 'regular i/I 同时忽略变音符号。
警告:"general" 排序规则一次测试的字符不超过一个。也就是说,"non-spacing umlaut"加上元音不会被视为等于组合。
其中 link... 对于某些排序规则,一个字符 æ
与两个字母 ae
的排序相同。表示为:Aa ae=æ az
。在大约一半的其他归类中,字符 æ
被视为单独的字母;这是在 az
之后和 b
之前表示的。甚至在斯堪的纳维亚排序规则 zz
之后。这种单独的字母概念有时适用于字母对,例如 cs
(匈牙利语)和 ch
(繁体西班牙语)。