답변:
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의 의견 을 추가하고 싶습니다 (설명서에서 가져 왔습니다).
의 의미에 대한 모호성을 피하려면 대신 문자 세트 참조
utf8
를utf8mb4
명시 적으로 지정하십시오utf8
.