Vous manquez le point sur CHARACTER SET
et COLLATION
. Un CHARACTER SET
est une collection de personnages différents. Un COLLATION
dit s'il faut traiter les caractères comme égaux -- pensez A
et a
-- caractères différents, mais traités pour ORDER BY
et WHERE =
, etc. comme étant identiques.
mysql> SELECT 'K'='K' COLLATE utf8_unicode_ci;
+-----------------------------------+
| 'K'='K' COLLATE utf8_unicode_ci |
+-----------------------------------+
| 1 |
+-----------------------------------+
Ainsi, dans utf8_unicode_ci (ou utf8mb4_unicode_ci), ces deux caractères sont considérés comme "égaux".
"Equal" est le test pour UNIQUE
clés.
Définissez le COLLATION
pour la colonne selon ce qui a du sens pour vous.
- utf8mb4_unicode_ci pour de bonnes comparaisons "dans la vraie vie", y compris apparemment celle-ci. K=k=Ķ=ķ
- utf8mb4_unicode_ci pour des comparaisons plus simples. En particulier, aucune combinaison à 2 caractères ne correspond aux encodages à 1 caractère. Le pliage de caisse et le décapage des accents se produisent. K=k=Ķ=ķ
- utf8mb4_bin vérifie aveuglément les bits. Pas de pliage de cas, etc. K k Ķ ķ sont tous inégaux.
utf8mb4_latvian_ci est un peu différent :K=k mais pas égal à Ķ=ķ . Il existe d'autres classements spécialisés pour d'autres langues (principalement d'Europe occidentale).
Votre K
s'appelle "LETTRE MAJUSCULE LATINE PLEINE CHASSE K", il est donc tout à fait raisonnable qu'elle soit égale au latin K
.