我在 MySQL 5.7.27 中有一个用户表utf8mb4_unicode_ci
整理。
不幸的是, ı 没有像 i 那样进行线程化,以下查询将找不到Yılmaz
select id from users where name='Yilmaz';
我对其他元音变音没有问题,例如ä
and a
。例如,两个查询给出完全相同的结果。
select id from users where name='Märie';
select id from users where name='Marie';
我不能简单地替换ı
by 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 http://mysql.rjweb.org/utf8_collations.html, 我看到ı=i
3 种排序规则: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)视为等于“常规 i/I”的排序规则同时忽略变音符号。
警告:“一般”排序规则一次不会测试多个字符。也就是说,“无间距变音符号”加上元音不会被视为等于该组合。
在那个链接中......一个角色æ
与两个字母的排序相同ae
用于一些整理。这由下式表示:Aa ae=æ az
。在大约一半的其他排序规则中,该字符æ
被视为单独的字母;这是由它之后表明的az
和之前b
。或者甚至之后zz
用于斯堪的纳维亚整理。这个单独的字母概念有时适用于字母对,例如cs
(匈牙利语)和ch
(传统西班牙语)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)