MySQL
Zeichensätze und Kollatierungen
Suche…
Erklärung
CREATE TABLE foo ( ...
name CHARACTER SET utf8mb4
... );
Verbindung
Für die Verwendung von Zeichensätzen ist es wichtig, dem MySQL-Server mitzuteilen, wie die Bytes des Clients codiert werden. Hier ist ein Weg:
SET NAMES utf8mb4;
Jede Sprache (PHP, Python, Java, ...) hat einen eigenen Weg, der normalerweise SET NAMES
vorzuziehen ist.
Zum Beispiel: SET NAMES utf8mb4
zusammen mit einer Spalte, die als CHARACTER SET latin1
deklariert ist. Dies wird beim INSERTing
von latin1 in utf8mb4 INSERTing
und beim SELECTing
zurück SELECTing
.
Welches Zeichenset und welche Sammlung?
Es gibt Dutzende von Zeichensätzen mit Hunderten von Kollatierungen. (Eine gegebene Kollatierung gehört nur zu einem Zeichensatz.) Siehe Ausgabe von SHOW COLLATION;
.
In der Regel sind nur 4 CHARACTER SETs
Bedeutung:
ascii -- basic 7-bit codes.
latin1 -- ascii, plus most characters needed for Western European languages.
utf8 -- the 1-, 2-, and 3-byte subset of utf8. This excludes Emoji and some of Chinese.
utf8mb4 -- the full set of UTF8 characters, covering all current languages.
Alle enthalten englische Zeichen, die identisch codiert sind. utf8 ist eine Teilmenge von utf8mb4.
Beste Übung...
- Verwenden Sie utf8mb4 für jeden
TEXT
oderVARCHAR
- Spalte , die eine Vielzahl von Sprachen in ihm haben können. - Verwenden Sie ascii (latin1 ist in Ordnung) für Hex-Zeichenfolgen (UUID, MD5 usw.) und einfache Codes (Ländercode, Postcode usw.).
utf8mb4 gab es bis Version 5.5.3 nicht, daher war utf8 das beste, was davor verfügbar war.
Außerhalb von MySQL bedeutet "UTF8" dasselbe wie utf8mb4 von MySQL und nicht utf8 von MySQL.
Kollatierungen beginnen mit dem Zeichensatznamen und enden normalerweise mit _ci
für "Groß- und Kleinschreibung" und " _bin
" für "Vergleichen Sie einfach die Bits."
Die "neueste" utf8mb4-Kollatierung ist utf8mb4_unicode_520_ci
, basierend auf Unicode 5.20. Wenn Sie mit einer einzigen Sprache arbeiten, möchten Sie beispielsweise utf8mb4_polish_ci
werden die Buchstaben basierend auf den polnischen Konventionen leicht neu angeordnet.
Zeichensätze für Tabellen und Felder festlegen
Sie können einen Zeichensatz sowohl pro Tabelle als auch für CHARSET
einzelne Feld mit den Anweisungen CHARACTER SET
und CHARSET
:
CREATE TABLE Address (
`AddressID` INTEGER NOT NULL PRIMARY KEY,
`Street` VARCHAR(80) CHARACTER SET ASCII,
`City` VARCHAR(80),
`Country` VARCHAR(80) DEFAULT "United States",
`Active` BOOLEAN DEFAULT 1,
) Engine=InnoDB default charset=UTF8;
City
und Country
verwenden UTF8
, da wir dies als Standardzeichensatz für die Tabelle festlegen. Street
hingegen wird ASCII
, da wir dies ausdrücklich gesagt haben.
Die Einstellung des richtigen Zeichensatzes hängt stark von Ihrem Datensatz ab, kann jedoch auch die Portabilität zwischen Systemen verbessern, die mit Ihren Daten arbeiten.