Ten artykuł jest lustrzanym artykułem tłumaczenia maszynowego, kliknij tutaj, aby przejść do oryginalnego artykułu.

Widok: 27972|Odpowiedź: 0

[Źródło] Różnica między utf8 a utf8mb4 w MySQL

[Skopiuj link]
Opublikowano 2021-4-21 18:01:22 | | | |
Nieznany zestaw znaków: utf8mb4
https://www.itsvse.com/thread-3199-1-1.html
1. Wprowadzenie

MySQL dodał to kodowanie utf8mb4 po 5.5.3, co oznacza, że większość bajtów 4, i jest specjalnie używany do kompatybilności z czterobajtowym unicode. Na szczęście utf8mb4 jest nadzbiorem utf8 i nie wymaga żadnej innej konwersji poza zmianą kodowania na utf8mb4. Oczywiście, aby zaoszczędzić miejsce, zazwyczaj wystarczy użyć utf8.

2. Opis treści

Jak wspomniano wyżej, skoro utf8 zapisuje większość znaków chińskich, dlaczego używać utf8mb4? Maksymalna długość znaków kodowania UTF8 obsługiwana przez MySQL wynosi 3 bajty, a jeśli napotkasz szeroki znak o długości 4 bajtów, wstawisz wyjątek. Maksymalny znak Unicode zakodowany przez UTF-8 wynoszący trzy bajty to 0xffff, co jest podstawową płaszczyzną wielojęzyczną (BMP) w Unicode. Oznacza to, że żaden znak Unicode, który nie znajduje się w podstawowej płaszczyźnie wielotekstowej, nie może być przechowywany w zbiorze znaków utf8 Mysql. Należą do nich emoji (Emoji to specjalne kodowanie Unicode powszechnie stosowane na telefonach z iOS i Android), wiele rzadko używanych znaków chińskich, a także nowe znaki Unicode i inne.

3. Źródło problemu

Oryginalny format UTF-8 używał od jednego do sześciu bajtów i mógł kodować do 31 znaków. Najnowsza specyfikacja UTF-8 używa tylko jednego do czterech bajtów i może kodować do 21 bitów, co dokładnie reprezentuje wszystkie 17 płaszczyzn Unicode. utf8 to zestaw znaków w Mysql, który obsługuje tylko znaki UTF-8 o długości do trzech bajtów, co jest podstawową płaszczyzną wielotekstową w Unicode.

Dlaczego UTF8 w Mysql obsługuje tylko znaki UTF-8 o maksymalnie trzech bajtach? Myślałem o tym, może dlatego, że gdy MySQL był rozwijany, Unicode nie miał płaszczyzny pomocniczej. W tamtym czasie Komitet Unicode wciąż marzył o "65 535 znaków wystarczy dla całego świata". Długości ciągów znaków w Mysql liczą znaki, a dla typów danych CHAR ciągi muszą być wystarczająco długie. Przy użyciu zestawu znaków utf8, długość wymagana do zachowania to najdłuższa długość znaku utf8 pomnożona przez długość ciągu znaków, więc naturalne jest ograniczenie maksymalnej długości utf8 do 3, na przykład CHAR(100) Mysql zachowuje 300 bajtów. Jeśli chodzi o to, dlaczego kolejne wersje nie obsługują 4-bajtowych znaków UTF-8, myślę, że jednym z powodów jest zgodność wsteczna, a drugim to, że znaki spoza podstawowej płaszczyzny wielojęzycznej są rzadko używane.

Aby zapisać znaki UTF-8 o długości 4 bajtów w Mysql, wymagany jest zestaw znaków utf8mb4, ale jest on obsługiwany dopiero po wersji 5.5.3 (patrz wersja: select version(); )。 Myślę, że dla lepszej kompatybilności zawsze powinieneś używać utf8mb4 zamiast utf8.  Dla danych typu CHAR utf8mb4 zajmuje więcej miejsca, a zgodnie z oficjalną rekomendacją Mysql używaj VARCHAR zamiast CHAR.







Poprzedni:Proste użycie frameworka ORM SqlSugar
Następny:Nagłówek HTTP request Expect jest szczegółowo wyjaśniony
Zrzeczenie się:
Całe oprogramowanie, materiały programistyczne lub artykuły publikowane przez Code Farmer Network służą wyłącznie celom edukacyjnym i badawczym; Powyższe treści nie mogą być wykorzystywane do celów komercyjnych ani nielegalnych, w przeciwnym razie użytkownicy ponoszą wszelkie konsekwencje. Informacje na tej stronie pochodzą z Internetu, a spory dotyczące praw autorskich nie mają z nią nic wspólnego. Musisz całkowicie usunąć powyższą zawartość z komputera w ciągu 24 godzin od pobrania. Jeśli spodoba Ci się program, wspieraj oryginalne oprogramowanie, kup rejestrację i korzystaj z lepszych, autentycznych usług. W przypadku naruszenia praw prosimy o kontakt mailowy.

Mail To:help@itsvse.com