MySQL
Zestawy znaków i układy
Szukaj…
Deklaracja
CREATE TABLE foo ( ...
name CHARACTER SET utf8mb4
... );
Połączenie
Istotne w użyciu zestawów znaków jest poinformowanie serwera MySQL o tym, jakie są kodowane bajty klienta. Oto jeden ze sposobów:
SET NAMES utf8mb4;
Każdy język (PHP, Python, Java, ...) ma swój własny sposób, który zwykle jest lepszy niż SET NAMES
.
Na przykład: SET NAMES utf8mb4
wraz z kolumną zadeklarowaną CHARACTER SET latin1
- spowoduje to konwersję z latin1 do utf8mb4 podczas INSERTing
i konwersję z powrotem podczas SELECTing
.
Który ZNAK ZESTAWU I KOLACJA?
Istnieją dziesiątki zestawów znaków z setkami zestawień. (Dane zestawienie należy do tylko jednego zestawu znaków.) Zobacz dane wyjściowe SHOW COLLATION;
.
Zwykle są tylko 4 CHARACTER SETs
które mają znaczenie:
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.
Wszystkie zawierają angielskie znaki, zakodowane identycznie. utf8 jest podzbiorem utf8mb4.
Najlepsze praktyki...
- Użyj utf8mb4 dla dowolnej kolumny
TEXT
lubVARCHAR
która może zawierać wiele różnych języków. - Użyj ascii (latin1 jest w porządku) dla ciągów szesnastkowych (UUID, MD5 itp.) I prostych kodów (kod_krajowy, kod_pocztowy itp.).
utf8mb4 istniał dopiero w wersji 5.5.3, więc utf8 był wcześniej najlepszy z dostępnych.
Poza MySQL , „UTF8” oznacza te same rzeczy, co utf8mb4 MySQL, a nie utf8 MySQL.
Sortowanie rozpoczyna się od nazwy zestawu znaków i zwykle kończy się na _ci
dla „niewrażliwy na _bin
liter i akcent” lub _bin
dla „po prostu porównaj bity.
„Najnowsze” zestawienie utf8mb4_unicode_520_ci
to utf8mb4_unicode_520_ci
, oparte na Unicode 5.20. Jeśli pracujesz w jednym języku, możesz chcieć, powiedzmy, utf8mb4_polish_ci
, który nieznacznie zmieni kolejność liter w oparciu o polskie konwencje.
Ustawianie zestawów znaków w tabelach i polach
Możesz ustawić zestaw znaków zarówno dla tabeli, jak i dla poszczególnych pól za pomocą instrukcji CHARACTER SET
i 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
i Country
użyją UTF8
, ponieważ ustawiliśmy go jako domyślny zestaw znaków dla tabeli. Z drugiej strony Street
będzie używać ASCII
, jak to specjalnie powiedzieliśmy.
Ustawienie odpowiedniego zestawu znaków jest wysoce zależne od zestawu danych, ale może również znacznie poprawić przenośność między systemami pracującymi z danymi.