2012-07-18 15 views
28

utf16 oder utf32? Ich versuche Inhalte in vielen Sprachen zu speichern. Einige der Sprachen verwenden doppelt breite Schriftarten (z. B. sind japanische Schriftarten häufig doppelt so breit wie englische Schriftarten). Ich bin mir nicht sicher, welche Art von Datenbank ich verwenden soll. Jede Information über die Unterschiede zwischen diesen vier Zeichensätzen ...Utf8_general_ci oder utf8mb4 oder ...?

Antwort

40

MySQL utf32 und utf8mb4 (sowie Standard-UTF-8) können jedes Zeichen direkt speichern, das durch Unicode spezifiziert wird; Ersteres hat eine feste Größe von 4 Bytes pro Zeichen, während letzteres zwischen 1 und 4 Bytes pro Zeichen beträgt.

utf8mb3 und das Original utf8 können nur die ersten 65.536 Codepunkte speichern, die CJVK (Chinesisch, Japanisch, Vietnam, Koreanisch) abdecken und 1 bis 3 Byte pro Zeichen verwenden.

utf16 verwendet 2 Bytes für die ersten 65.536 Codepoints und 4 Bytes für alles andere.

Was Schriften betrifft, das ist nur eine visuelle Sache.

"The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)"

Siehe auch MySQL documentation for Unicode support.

+5

Nur um extra klar zu sein, der Kommentar zu 'utf8_general' gilt auch für alle anderen 'utf8_ * 'Kollatierungen; Alle werden den 'utf8mb3' aka' utf8' Zeichensatz von MySQL benutzen. –

+0

@JohnFlatness Danke. Ihr Kommentar ist genau das, was ich als nächstes fragen würde. Ich dachte, dass UTF-16 zum Beispiel 2 Bytes für Mandarin-Zeichen verwendet? Ich schaue mir die Dokumentation an, die du mir gegeben hast, in der Hoffnung, dass sie alles abdeckt, was 65.536 bedeutet. XD –

+0

Chinesische Zeichen befinden sich innerhalb der Basic Multilingual Plane (die ersten 65.536 Codepoints). –