sql >> Database >  >> RDS >> Mysql

mysql utf8mb4_unicode_ci veroorzaakt unieke sleutelbotsing

Je mist het punt over CHARACTER SET en COLLATION . EEN CHARACTER SET is een verzameling van verschillende karakters. Een COLLATION zegt of de tekens als gelijk moeten worden behandeld -- denk aan A en a -- verschillende karakters, maar behandeld voor ORDER BY en WHERE = , etc als hetzelfde.

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

Dus in utf8_unicode_ci (of utf8mb4_unicode_ci) worden die twee tekens als "gelijk" beschouwd.

"Gelijk" is de test voor UNIQUE toetsen.

Stel de COLLATION in voor de kolom tot wat voor jou logisch is.

  • utf8mb4_unicode_ci voor goede 'real life'-vergelijkingen, blijkbaar inclusief deze. K=k=Ķ=ķ
  • utf8mb4_unicode_ci voor meer eenvoudige vergelijkingen. In het bijzonder komen geen 2-tekencombinaties overeen met 1-tekencoderingen. Het vouwen van de behuizing en het strippen van accenten komt voor. K=k=Ķ=ķ
  • utf8mb4_bin controleert blindelings de bits. Geen hoesjes vouwen, enz. K k Ķ ķ zijn allemaal ongelijk.

utf8mb4_latvian_ci is een beetje anders:K=k maar niet gelijk aan Ķ=ķ . Er zijn andere gespecialiseerde sorteringen voor andere talen (meestal West-Europees).

Uw heet "VOLLEDIGE LATIJNSE HOOFDLETTER K", dus het is redelijk dat het vergelijkbaar is met Latijnse K .




  1. voeg titels toe voor de geüploade afbeeldingen in nodejs, mysql en reageer

  2. Hoe maak je een tijdelijke tabel in SQL?

  3. Hoe verwijder ik nieuwe regeltekens uit gegevensrijen in mysql?

  4. Kan ik dit utf8-teken converteren?