[mysql] MySQL에서 utf8mb4와 utf8 문자셋의 차이점은 무엇입니까?

MySQL 에서 utf8mb4utf8문자 집합 의 차이점은 무엇입니까 ?

ASCII , UTF-8 , UTF-16UTF-32 인코딩 에 대해 이미 알고 있습니다 . 그러나 MySQL Server에utf8mb4 정의 된 다른 인코딩 유형과 인코딩 그룹의 차이점이 무엇인지 궁금합니다 .

사용 utf8mb4보다는 특별한 이점 / 제안 이 utf8있습니까?



답변

UTF-8 은 가변 길이 인코딩입니다. UTF-8의 경우 이는 하나의 코드 포인트를 저장하는 데 1-4 바이트가 필요함을 의미합니다. 그러나 “utf8″(별칭 “utf8mb3”)이라는 MySQL의 인코딩은 코드 포인트 당 최대 3 바이트 만 저장합니다.

따라서 문자 세트 “utf8″/ “utf8mb3″는 모든 유니 코드 코드 포인트를 저장할 수 없습니다 : ” 기본 다국어 평면 ” 이라고하는 0x000에서 0xFFFF 범위 만 지원합니다 . 유니 코드 인코딩 비교를 참조하십시오 .

이것은 MySQL 문서 가 그것에 대해 말한 것 (같은 페이지의 이전 버전)입니다 .

이름이 utf8 [/ utf8mb3] 인 문자 세트는 문자 당 최대 3 바이트를 사용하며 BMP 문자 만 포함합니다. MySQL 5.5.3부터 utf8mb4 문자 세트는 문자 당 최대 4 바이트를 사용하여 보충 문자를 지원합니다.

  • BMP 문자의 경우 utf8 [/ utf8mb3] 및 utf8mb4는 동일한 저장 특성을 갖습니다. 동일한 코드 값, 동일한 인코딩, 동일한 길이.

  • 보충 문자의 경우 utf8 [/ utf8mb3]은 문자를 전혀 저장할 수 없지만 utf8mb4는 4 바이트를 저장해야합니다. utf8 [/ utf8mb3]는 문자를 전혀 저장할 수 없으므로 utf8 [/ utf8mb3] 열에 보충 문자가 없으며 이전 버전의 utf8 [/ utf8mb3] 데이터를 업그레이드 할 때 문자를 변환하거나 데이터를 잃을 염려가 없습니다. MySQL.

따라서 emoji 와 같이 BMP 외부에있는 문자 (및 일반적으로 원하는)를 열에서 지원 하도록하려면 “utf8mb4″를 사용하십시오. 실제 사용시 가장 일반적인 비 BMP 유니 코드 문자무엇입니까?를 참조하십시오 . .


답변

utf8mb4요즘 우리는 또한 언어 문자 만 문자, 새로 도입 된 그림 이모티콘 등뿐만 아니라 저장을위한 지원 필요하기 때문에 문자 세트에 유용합니다.

좋은이 읽을 MySQL 데이터베이스에서 전체 유니 코드 지원하는 방법 이 되거 수 마티아스 Bynens에 의해.


답변

으로부터 촬영 매뉴얼의 MySQL 8.0 참조 :

  • utf8mb4: 문자 당 1-4 바이트를 사용 하는 유니 코드 문자 세트 의 UTF-8 인코딩 .

  • utf8mb3: 문자 당 1-3 바이트를 사용 하는 유니 코드 문자 세트 의 UTF-8 인코딩 .

에서 MySQL을 utf8 현재의 별칭입니다 utf8mb3있는 사용되지 와 미래에서 제거됩니다 MySQL의 릴리스. 이 시점 utf8 에서에 대한 참조가됩니다 utf8mb4 .

따라서이 별칭에 관계없이 의식적으로 utf8mb4인코딩을 설정할 수 있습니다 .

답을 완성하기 위해 아래 @WilliamEntriken의 의견 을 추가하고 싶습니다 (설명서에서 가져 왔습니다).

의 의미에 대한 모호성을 피하려면 대신 문자 세트 참조 utf8utf8mb4명시 적으로 지정하십시오 utf8.


답변