utf8_general_ci
är en mycket enkel – och på Unicode, väldigt trasig – sammanställning, en som ger felaktiga resultat på allmän Unicode-text. Vad den gör är:
- konverterar till Unicode-normaliseringsform D för kanonisk nedbrytning
- tar bort alla kombinationstecken
- konverterar till versaler
Detta fungerar inte korrekt på Unicode, eftersom det inte förstår Unicode-skal. Enbart Unicode-hölje är mycket mer komplicerat än ett ASCII-inriktat tillvägagångssätt kan hantera. Till exempel:
- Små bokstäver i "ẞ" är "ß", men versalerna i "ß" är "SS".
- Det finns två grekiska sigma med små bokstäver, men bara en versal; överväga "Σίσυφος".
- Bokstäver som "ø" bryts inte ner till ett "o" plus en diakritisk, vilket betyder att de inte kommer att sorteras korrekt.
Det finns många andra finesser.
utf8_unicode_ci
använder standarden Unicode Collation Algorithm , stöder så kallade expansioner och ligaturer, till exempel:den tyska bokstaven ß (U+00DF LETTER SHARP S) är sorterad nära "ss" Bokstaven Œ (U+0152 LATIN CAPITAL LIGATURE OE) är sorterad nära "OE".
utf8_general_ci
stöder inte expansioner/ligaturer, den sorterar alla dessa bokstäver som enstaka tecken, och ibland i fel ordning.
utf8_unicode_ci
är allmänt mer exakt för alla skript. Till exempel på kyrilliskt block:utf8_unicode_ci
är bra för alla dessa språk:ryska, bulgariska, vitryska, makedonska, serbiska och ukrainska. Medan utf8_general_ci bara är bra för ryska och bulgariska delmängder av kyrilliska. Extra bokstäver som används på vitryska, makedonska, serbiska och ukrainska är inte bra sorterade.
Kostnaden för utf8_unicode_ci
är att det är en liten bitslower än utf8_general_ci
. Men det är priset du betalar för korrekthet. Antingen kan du ha ett snabbt svar som är fel, eller ett mycket lite långsammare svar som är rätt. Ditt val. Det är mycket svårt att någonsin motivera att ge felaktiga svar, så det är bäst att anta att utf8_general_ci
existerar inte och att alltid använda utf8_unicode_ci
. Tja, om du inte vill ha fel svar.
Källa:http://forums.mysql.com/read .php?103,187048,188748#msg-188748