Mysql
 sql >> Base de données >  >> RDS >> Mysql

MySQL ne traite pas ı comme i ?

Se référant à http://mysql.rjweb.org/utf8_collations.html , je vois que ı=i en 3 classements :utf8_general_ci, utf8_general_mysql500_ci, utf8_turkish_ci. Cependant, pour la collation turque, I=ı trie avant les autres I accentués. Dans toutes les autres collations ı trie après tout les I, comme s'il était traité comme une lettre distincte.

Pendant ce temps İ=I dans tous les classements sauf utf8_turkish_ci.

L'intrigue se corse avec MySQL 8.0. utf8mb4_tr_0900_ai_ci (uniquement) a cet ordre :

I=Ì=Í=Î=Ï=Ĩ=Ī=Ĭ=Į=ı sort before  i=ì=í=î=ï=ĩ=ī=ĭ=į=İ

Pendant ce temps ä=Ä et ils correspondent à la plupart des autres A accentués pour la plupart des classements (y compris les classements turcs).

Conclusion :Il semble que utf8[mb4]_general_ci soit le seul classement en 5.7 ou 8.0 qui traitera toujours un i sans point (ou un I pointillé) égal à un 'i/I régulier et en même temps ignorer les trémas.

Avertissement :Les classements "généraux" ne testent pas plus d'un caractère à la fois. Autrement dit, un "tréma sans espacement" plus une voyelle ne seront pas traités comme égaux à la combinaison.

Dans ce lien... Le seul caractère æ est trié de la même manière que les deux lettres ae pour certaines collations. Cela est indiqué par :Aa ae=æ az . Dans environ la moitié des autres classements, le caractère æ est traité comme une lettre distincte ; ceci est indiqué par le fait qu'il soit après az et avant b . Ou même après zz pour les collations scandinaves. Ce concept de lettres séparées s'applique parfois aux paires de lettres, par exemple cs (hongrois) et ch (espagnol traditionnel).