Mysql
 sql >> Baza danych >  >> RDS >> Mysql

mysql utf8mb4_unicode_ci powoduje kolizję unikalnych kluczy

Brakuje ci punktu dotyczącego CHARACTER SET i COLLATION . CHARACTER SET to zbiór różnych postaci. COLLATION mówi, czy traktować znaki jako równe -- pomyśl A i a -- różne znaki, ale traktowane jako ORDER BY i WHERE = itp. jako takie same.

mysql> SELECT 'K'='K' COLLATE utf8_unicode_ci;
+-----------------------------------+
| 'K'='K' COLLATE utf8_unicode_ci  |
+-----------------------------------+
|                                 1 |
+-----------------------------------+

Tak więc w utf8_unicode_ci (lub utf8mb4_unicode_ci) te dwa znaki są uważane za „równe”.

„Równe” to test dla UNIQUE klawisze.

Ustaw COLLATION za kolumnę do wszystkiego, co ma dla Ciebie sens.

  • utf8mb4_unicode_ci dla dobrych porównań do „prawdziwego życia”, najwyraźniej włączając to. K=k=Ķ=ķ
  • utf8mb4_unicode_ci dla bardziej prostych porównań. W szczególności żadne kombinacje dwuznakowe nie pasują do kodowania jednoznakowego. Występuje składanie kopert i usuwanie akcentów. K=k=Ķ=ķ
  • utf8mb4_bin ślepo sprawdza bity. Bez składania spraw itp. K k Ķ ķ są nierówne.

utf8mb4_latvian_ci jest nieco inny:K=k, ale nie równy Ķ=ķ . Istnieją inne specjalistyczne zestawienia dla innych języków (głównie zachodnioeuropejskich).

Twój nazywa się „ŁACIŃSKA WIELKA LITERA K” NA PEŁNEJ SZEROKOŚCI, więc całkiem rozsądne jest porównanie z łacińskim K .




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Przykład wiosennego rozruchu CRUD z MySQL

  2. Pobieranie indeksu wstawionych wierszy z bazy danych MySQL

  3. MySQL prowadzi rozmowę między dwoma użytkownikami

  4. Selektywny import z CSV do MySQL

  5. Pobierz z bazy danych, ale tylko przez 30 dni