Пропускате идеята за 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 .