sql >> Databáze >  >> RDS >> Mysql

mysql utf8mb4_unicode_ci způsobit jedinečnou kolizi klíče

Chybí vám bod o CHARACTER SET a COLLATION . CHARACTER SET je sbírka různých postav. COLLATION říká, zda se mají znaky považovat za rovnocenné -- myslím A a a -- různé znaky, ale ošetřeno pro ORDER BY a WHERE = , atd. jako stejné.

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

Takže v utf8_unicode_ci (nebo utf8mb4_unicode_ci) jsou tyto dva znaky považovány za "rovné".

"Equal" je test pro UNIQUE klíče.

Nastavte COLLATION pro sloupec na cokoliv, co pro vás má smysl.

  • utf8mb4_unicode_ci pro dobré srovnání ze skutečného života, zjevně včetně tohoto. K=k=Ķ=ķ
  • utf8mb4_unicode_ci pro jednodušší srovnání. Zejména žádné 2znakové kombinace neodpovídají 1znakovému kódování. Dochází ke skládání pouzder a odstraňování zvýraznění. K=k=Ķ=ķ
  • utf8mb4_bin slepě kontroluje bity. Žádné skládání pouzdra atd. K k Ķ ķ jsou všechny nestejné.

utf8mb4_latvian_ci je trochu jiný:K=k, ale nerovná se Ķ=ķ . Existují další specializované porovnávání pro jiné jazyky (většinou západoevropské).

Váš se nazývá "VELKÉ PÍSMENO K V PLNÉ ŠÍŘCE LATINSKÉ PÍSMENO", takže je docela rozumné, že se rovná latinskému K .




  1. Je vložení/aktualizace spojení na MySQL atomická operace?

  2. Důsledky nastavení hodnoty sloupce MySQL na NULL místo 0 nebo '' na místo na disku

  3. Volání členské funkce rowCount() na jiném než objektu

  4. Typy kurzorů SQL Server - Co jsou statické kurzory v SQL Server | Kurz SQL Server / Kurz TSQL