sql >> Database >  >> RDS >> Mysql

Wat zijn de verschillen tussen utf8_general_ci en utf8_unicode_ci?

utf8_general_ci is een zeer eenvoudige — en op Unicode, zeer gebrekkige — sortering, een die onjuiste resultaten geeft op algemene Unicode-tekst. Wat het doet is:

  • converteert naar Unicode-normalisatievorm D voor canonieke decompositie
  • verwijdert alle combinatietekens
  • converteert naar hoofdletters

Dit werkt niet correct op Unicode, omdat het de Unicode-behuizing niet begrijpt. Unicode-behuizing alleen is veel gecompliceerder dan een ASCII-gerichte benadering aankan. Bijvoorbeeld:

  • De kleine letter van "ẞ" is "ß", maar de hoofdletter van "ß" is "SS".
  • Er zijn twee Griekse sigma's in kleine letters, maar slechts één in hoofdletter; overweeg "Σίσυφος".
  • Letters zoals "ø" ontleden niet in een "o" plus een diakritisch teken, wat betekent dat het niet correct wordt gesorteerd.

Er zijn veel andere subtiliteiten.

  1. utf8_unicode_ci gebruikt het standaard Unicode Collation Algorithm , ondersteunt zogenaamde uitbreidingen en ligaturen, bijvoorbeeld:Duitse letter ß (U+00DF LETTER SHARP S) wordt gesorteerd in de buurt van "ss" Letter Œ (U+0152 LATIJNSE HOOFDSTAD LIGATUUR OE) wordt gesorteerd in de buurt van "OE".

utf8_general_ci ondersteunt geen uitbreidingen/ligaturen, het sorteert al deze letters als enkele tekens, en soms in een verkeerde volgorde.

  1. utf8_unicode_ci is in het algemeen nauwkeuriger voor alle scripts. Bijvoorbeeld op Cyrillisch blok:utf8_unicode_ci is prima voor al deze talen:Russisch, Bulgaars, Wit-Russisch, Macedonisch, Servisch en Oekraïens. Terwijl utf8_general_ci alleen goed is voor de Russische en Bulgaarse subset van Cyrillisch. Extra letters die worden gebruikt in Wit-Russisch, Macedonisch, Servisch en Oekraïens zijn niet goed gesorteerd.

De kosten van utf8_unicode_ci is dat het een beetje . is bitslager dan utf8_general_ci . Maar dat is de prijs die u betaalt voor correctheid. Je kunt ofwel een snel antwoord hebben dat fout is, of een heel iets langzamer antwoord dat goed is. Jouw keuze. Het is erg moeilijk om het geven van foute antwoorden ooit te rechtvaardigen, dus het is het beste om aan te nemen dat utf8_general_ci bestaat niet en om altijd utf8_unicode_ci . te gebruiken . Nou ja, tenzij je verkeerde antwoorden wilt.

Bron:http://forums.mysql.com/read .php?103,187048,188748#msg-188748



  1. MS SQL verbinden met IRI Workbench

  2. Gegevensbestanden verplaatsen in SQL Server - Deel 1

  3. Getallen opmaken met komma's in SQL Server

  4. Android SQLite:hoe een grote tabel genereren voor testdoeleinden?