Пропускате идеята за CHARACTER SET
и COLLATION
. CHARACTER SET
е колекция от различни герои. A COLLATION
казва дали да третираме знаците като равни - помислете за A
и a
-- различни знаци, но третирани за ORDER BY
и WHERE =
и т.н. като едни и същи.
mysql> SELECT 'K'='K' COLLATE utf8_unicode_ci;
+-----------------------------------+
| 'K'='K' COLLATE utf8_unicode_ci |
+-----------------------------------+
| 1 |
+-----------------------------------+
Така че в utf8_unicode_ci (или utf8mb4_unicode_ci) тези два знака се считат за „равни“.
„Равно“ е тестът за UNIQUE
ключове.
Задайте COLLATION
за колоната към всичко, което има смисъл за вас.
- utf8mb4_unicode_ci за добри сравнения в „реалния живот“, очевидно включително и това. K=k=Ķ=ķ
- utf8mb4_unicode_ci за по-простомислещи сравнения. По-специално няма комбинации от 2 знака, които да съответстват на 1-символни кодировки. Сгъване на корпуса и премахване на акцента се случва. K=k=Ķ=ķ
- utf8mb4_bin сляпо проверява битовете. Без сгъване и т.н. K k Ķ ķ всички са неравни.
utf8mb4_latvian_ci е малко по-различно:K=k, но не е равно на Ķ=ķ . Има и други специализирани съпоставяния за други езици (предимно западноевропейски).
Вашият K
се нарича "ПЪЛНА ШИРИНА ЛАТИНСКА ГЛАВНА БУКВА K", така че е напълно разумно да се сравнява с латинската K
.