utf8과 latin1의 차이점


128

utf8과 latin1의 차이점은 무엇입니까?


3
그것들은 다른 인코딩입니다 ( 일부 문자는 공통 바이트 시퀀스에 매핑됩니다 (예 : ASCII 문자 및 많은 악센트 부호가있는 문자)). UTF-8은 모든 코드 포인트가있는 유니 코드 인코딩 중 하나입니다. Latin1은 256 자 미만으로 인코딩합니다.
ShreevatsaR

Linux 로케일에서 사용할 수 있으며 다음 질문에서 언급 할 수있는
latin9도 있습니다

답변:


151

UTF-8 은 세계 지배를 위해 준비 되었지만 Latin1 은 그렇지 않습니다.

Latin1 인코딩을 사용하여 중국어, 일본어, 히브리어, 러시아어 등과 같은 비 라틴 문자를 저장하려고하면 mojibake 로 끝납니다 . 이 기사 의 소개 텍스트가 유용하다는 것을 알게 될 것이다.

전체 4 바이트 UTF-8 지원은 MySQL 5.5에서만 도입되었습니다. 해당 버전 이전에는 문자 당 4 바이트가 아닌 문자 당 3 바이트까지만 진행됩니다. 따라서 BMP 평면 만 지원하고 Emoji 평면은 지원하지 않았습니다. 완전한 4 바이트 UTF-8 지원을 원하는 경우 MySQL을 5.5 이상으로 업그레이드하거나 PostgreSQL과 같은 다른 RDBMS로 이동하십시오. MySQL 5.5 이상에서는이라고 utf8mb4합니다.


31
Mysql 5.1은 3 바이트 UTF-8을 지원 하지만 Mysql 5.5 4 바이트 UTF-8을 utf8mb4로 지원합니다.
벨크로

2
@BalusC UTF-8이 완전히 지원되지 않는 방법에 대해 더 자세히 설명해 주시겠습니까? 그것은 MySQL 5.1이 모든 유니 코드 문자를 저장할 수 없다는 것을 의미합니까 ?
Pacerier 2016 년

2
@Pacerier : 문자 당 3 바이트 만 지원하므로 BMP (처음 65535 자) 만 지원되며 나머지는 지원하지 않습니다. 모든 문자는 en.wikipedia.org/wiki/Plane_ (
유니 코드

2
@BalusC 5.1.63을 사용하고 웹 서버의 mysql 버전을 업데이트 할 권한이없는 사람들은 대안이 무엇입니까?
Pacerier

6
@Pacerier : 당신은 저장 할 수 VARBINARY대신 VARCHAR및 디코딩 비즈니스 계층 자신에 대한 / 인코딩, 그러나 이것은 해키입니다. 더 좋은 방법이있을 수있는 새로운 질문을 고려하십시오.
BalusC

47

latin1에서 각 문자의 길이는 정확히 1 바이트입니다. utf8에서 문자는 둘 이상의 바이트로 구성 될 수 있습니다. 결과적으로 utf8은 latin1보다 많은 문자를 갖습니다 (그리고 공통적으로 사용되는 문자는 반드시 동일한 바이트 / 바이트 순서로 표현 될 필요는 없습니다).


1
아스키와 빈은 어떻습니까?
Yousha Aleayoub

8
@YoushaAleayoub ASCII는 0에서 127까지의 문자를 사용하는 1 바이트 인코딩이므로 latin1의 절반만큼 문자를 인코딩 할 수 있습니다. latin1과 utf8의 엄격한 하위 집합으로, latin1과 utf8의 바이트 0부터 127까지는 ASCII에서와 동일한 내용을 인코딩합니다. Bin은 인코딩이 아닙니다. 일반적으로 파일을 읽을 때 제공 할 수있는 옵션으로, IO 함수에 인코딩을 적용하지 말고 바이트 단위로 파일을 읽도록 지시합니다.
sepp2k

1
덕분에, 내가 의미 binary한 부씩 인쇄를 ...? 하나는 영어 / 숫자 필드에 대한 더 나은 어떤 : ascii_general_ciascii_bin?
Yousha Aleayoub
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.