sql >> Databasteknik >  >> RDS >> Mysql

mysql utf8mb4_unicode_ci orsakar unik nyckelkollision

Du missar poängen med CHARACTER SET och COLLATION . En CHARACTER SET är en samling av olika karaktärer. En COLLATION säger om tecknen ska behandlas som lika -- tänk på A och a -- olika tecken, men behandlas för ORDER BY och WHERE = , etc som är samma.

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

Så i utf8_unicode_ci (eller utf8mb4_unicode_ci) anses dessa två tecken vara "lika".

"Equal" är testet för UNIQUE nycklar.

Ställ in COLLATION för kolumnen till vad som är vettigt för dig.

  • utf8mb4_unicode_ci för bra jämförelser i "verkliga livet", uppenbarligen inklusive denna. K=k=Ķ=ķ
  • utf8mb4_unicode_ci för mer enkla jämförelser. I synnerhet inga 2-teckenkombinationer matchar 1-teckenkodningar. Fallvikning och accentstrippning förekommer. K=k=Ķ=ķ
  • utf8mb4_bin kollar blint bitarna. Ingen fallvikning, etc. K k Ķ ķ är alla olika.

utf8mb4_latvian_ci är lite annorlunda:K=k men inte lika med Ķ=ķ . Det finns andra specialiserade sammanställningar för andra språk (främst västeuropeiska).

Din kallas "FULLWIDTH LATIN CAPITAL LETTER K", så det är ganska rimligt att det jämförs med latinska K .




  1. mysqldump testa låsningstabeller

  2. Är det bra att använda ContentProvider för att hantera databasoperationer?

  3. MariaDB CEIL() Förklarad

  4. SQL Server 2008 R2 till MySQL-migrering