2010-04-25 18 views
96

jaka jest różnica między utf8 i latin1?Różnice między utf8 i latin1

+2

Są to różne kodowania (z * niektórymi * znakami mapowanymi na sekwencje wspólnych bajtów, np. Znaki ASCII i wiele liter akcentowanych). UTF-8 to jedno kodowanie kodu Unicode ze wszystkimi jego punktami kodowymi; Latin1 koduje mniej niż 256 znaków. – ShreevatsaR

Odpowiedz

30

W języku łacińskim1 każda litera ma dokładnie jeden bajt długości. W utf8 postać może składać się z więcej niż jednego bajtu. W związku z tym utf8 ma więcej znaków niż latin1 (a znaki, które mają ze sobą wspólnego, niekoniecznie są reprezentowane przez ten sam bajt/sekwencja bajtów).

+0

A co z ascii i bin? –

+4

@YoushaAleayoub ASCII to jednobajtowe kodowanie, które używa znaków od 0 do 127, więc może kodować o połowę tyle znaków, co łaciński1. Jest to ścisły podzbiór zarówno latin1, jak i utf8, co oznacza, że ​​bajty od 0 do 127 zarówno w latin1, jak i utf8 kodują te same rzeczy, co w ASCII. Bin nie jest kodowaniem. Zwykle jest to opcja, którą możesz podać podczas czytania pliku, informując funkcje IO, aby nie stosować żadnego kodowania, ale zamiast tego odczytaj bajt pliku po bajcie. – sepp2k

+0

dziękuję, miałem na myśli 'binarny' zestawić ...? i który z nich jest lepszy dla pól angielskich/numerycznych: 'ascii_general_ci' lub' ascii_bin'? –

115

UTF-8 jest przygotowany do światowej dominacji, Latin1 nie jest.

Jeśli próbujesz przechowywać znaki spoza alfabetu łacińskiego, takie jak chiński, japoński, hebrajski, cyrylica itp., Używając kodowania Latin1, zostaną one zakończone jako mojibake. Może się okazać, że wprowadzający tekst this article jest przydatny (a nawet więcej, jeśli znasz nieco Javę).

Należy pamiętać, że pełna obsługa UTF-8 została wprowadzona tylko w MySQL 5.5. Przed tą wersją ma tylko 3 bajty, a nie 4 bajty na znak. Jeśli potrzebujesz pełnej obsługi UTF-8, zaktualizuj MySQL do co najmniej 5.5 lub przejdź do innego RDBMS takiego jak PostgreSQL.

+0

to 4 bajty na kod, a nie znak. –

+27

Mysql 5.1 obsługuje 3-bajtowe UTF-8, jednak Mysql 5.5 [obsługuje] (http://dev.mysql.com/doc/refman/5.5/en/charset-unicode.html) 4 bajty UTF-8 jako utf8mb4. – velcrow

+0

To prawda, ale MySQL 5.5 nie był GA w momencie opublikowania tej odpowiedzi. Został wydany w grudniu 2010 roku. – BalusC