IT

MySQL의 utf8mb4와 utf8 문자 집합의 차이점은 무엇입니까?

itgroup 2022. 10. 29. 14:17
반응형

MySQL의 utf8mb4와 utf8 문자 집합의 차이점은 무엇입니까?

와의 차이는 무엇입니까?utf8mb4그리고.utf8MySQL의 문자 집합?

ASCII, UTF-8, UTF-16UTF-32 인코딩에 대해서는 이미 알고 있습니다만, 어떤 차이가 있는지 알고 싶습니다.utf8mb4MySQL Server에 정의된 다른 인코딩 유형을 가진 인코딩 그룹.

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

UTF-8은 가변 길이 부호화입니다.UTF-8의 경우, 이것은 1개의 코드 포인트를 저장하는 데 1~4바이트가 필요하다는 것을 의미합니다.그러나 MySQL의 인코딩 "utf8"("utf8mb3"의 별칭)은 코드 포인트당 최대 3바이트만 저장합니다.

따라서 문자 집합 "utf8"/"utf8mb3"은 모든 Unicode 코드 포인트를 저장할 수 없습니다. "기본 다국어 평면"이라고 하는 0x000 ~ 0xFFF 범위만 지원합니다.Unicode 인코딩 비교도 참조하십시오.

MySQL 문서에는 다음과 같은 내용이 기재되어 있습니다(같은 페이지의 이전 버전).

utf8[/utf8mb3]라는 이름의 문자 집합은 문자당 최대 3바이트를 사용하며 BMP 문자만 포함합니다.MySQL 5.5.3에서 utf8mb4 문자 집합은 보조 문자를 지원하는 문자당 최대 4바이트를 사용합니다.

  • BMP 문자의 경우 utf8[/utf8mb3]과 utf8mb4는 동일한 코드 값, 동일한 부호화, 동일한 길이의 스토리지 특성을 가집니다.

  • 보조문자의 경우 utf8[/utf8mb3]에서는 문자를 전혀 저장할 수 없지만 utf8mb4에서는 4바이트가 필요합니다.utf8[/utf8mb3]는 문자를 전혀 저장할 수 없으므로 utf8[/utf8mb3] 열에 보조 문자가 없으며 이전 버전의 MySQL에서 utf8[/utf8mb3] 데이터를 업그레이드할 때 문자 변환이나 데이터 손실에 대해 걱정할 필요가 없습니다.

따라서 열이 이모티콘과 같이 BMP 외부에 있는 문자 저장을 지원하도록 하려면 "utf8mb4"를 사용하십시오.참고 항목: 실제로 사용되는 가장 일반적인 비BMP Unicode 문자는 무엇입니까?

utf8mb4문자 집합은 오늘날 언어 문자뿐만 아니라 기호, 새로 도입된 이모티콘 등을 저장하기 위한 지원이 필요하기 때문에 유용합니다.

Mathias Bynens가 MySQL 데이터베이스에서 완전한 Unicode를 지원하는 방법에 대한 좋은 읽을거리도 이 점을 알 수 있습니다.

MySQL 8.0 레퍼런스 매뉴얼에서 인용한 내용:

  • utf8mb4: 1 문자당1 ~ 4 바이트를 사용하는 Unicode 문자 세트의 UTF-8 부호화.

  • utf8mb3: 1 문자~3 바이트를 사용하는 Unicode 문자 세트의 UTF-8 부호화.

MySQL에서 utf8현재 에일리어스입니다.utf8mb3는 더 이상 사용되지 않으며 향후 MySQL 릴리스에서 제거될 예정입니다.그 시점에서utf8 에 대한 참조가 되다 utf8mb4.

그래서 이 가명이 무엇이든 간에, 당신은 의식적으로 자신의 이름을utf8mb4부호화를 실시합니다.

답변을 완료하기 위해 아래 @WilliamEntriken의 코멘트를 추가합니다(매뉴얼도 참조).

의 의미에 대한 모호성을 피하기 위해utf8, 를 지정하는 것을 검토해 주세요.utf8mb4문자 집합 참조를 위해 명시적으로 대신utf8.

  • utf8는 MySQL의 UTF-8의 오래된 결함 구현입니다.이 구현은 폐지되고 있습니다.
  • utf8mb4UTF-8의 고정 실장이라고 하는 이름을 붙였습니다.이것이, 지금 당장 사용할 필요가 있는 것입니다.

결함이 있는 버전에서는 첫 번째 64k 문자 평면(기본 다국어 평면)의 문자만 작동하고 다른 문자는 유효하지 않은 것으로 간주됩니다.이 플레인 내의 코드 포인트 값 - 0 ~ 65535(일부는 특별한 이유로 예약됨)는 최대 3바이트의 UTF-8로 멀티바이트 인코딩으로 나타낼 수 있으며 MySQL의 초기 버전의 UTF-8은 이를 제한으로 설정하기로 임의로 결정했습니다.UTF-8이 문자당 최대 3바이트를 허용하는 것으로 정의되어 있지 않기 때문에 이 제한은 UTF-8 규칙을 올바르게 해석할 수 없었습니다.실제로 UTF-8의 초기 정의에서는 최대 6바이트(4바이트로 수정된 이후)로 정의되어 있습니다.MySQL의 원래 버전은 항상 임의로 기능하지 않습니다.

MySQL이 이것을 출시했을 때, 대부분의 유니코드 문자가 첫 번째 평면에 있었기 때문에 이 제한의 결과는 나쁘지 않았습니다.그 후, 그 첫 번째 평면 밖에 있는 값을 사용하여 유니코드에 새롭게 정의되는 문자 범위가 점점 더 많이 추가되었습니다.유니코드 자체에서 17개의 평면을 정의하지만 지금까지 사용되는 것은 7개뿐입니다.

MySQL은 오래된 코드를 부수지 않기 위해 특정 전제 하에 손상된 구현을 유지하고 새로운 고정 버전을 호출했습니다.utf8mb4이로 인해 MySQL의 진정한 UTF-8 구현이 아닌 UTF-8 또는 UTF-8 대체 형태로 명칭이 잘못 해석되고 있습니다.

MySQL의 향후 버전은 최종적으로 이전 버전을 단계적으로 폐지할 것이며, 현재로서는 사용되지 않는 것으로 간주할 수 있습니다.예측 가능한 미래에는utf8mb4UTF-8 인코딩이 올바른지 확인합니다.충분한 시간이 지나면 전류는utf8삭제될 것이며, 향후 언젠가utf8이번에는 고정 버전을 참고하여 다시 상승할 것입니다만, 하지만utf8mb4는 계속해서 명확하게 고정 버전을 참조합니다.

MySQL은 5.5.3 뒤에 이 utf8mb4 코드를 추가했습니다. Mb4는 4바이트 유니코드와 호환되도록 특별히 설계된 가장 많은 바이트 4입니다.다행히 UTF8MB4는 UTF8의 슈퍼셋이지만 인코딩을 UTF8MB4로 변환할 필요는 없습니다.물론 공간을 절약하기 위해서는 UTF8의 일반적인 사용으로도 충분합니다.

원래의 UTF-8 형식에서는 1 ~6 바이트를 사용하고, 최대 31 문자를 부호화할 수 있습니다.최신의 UTF-8 사양에서는, 1 ~4 바이트만을 사용하고, 최대 21 비트를 부호화할 수 있습니다.단, 17개의 Unicode 플레인 모두를 나타냅니다.UTF8은 Unicode의 기본 멀티텍스트플레인 UTF-8 문자 중 최대 3바이트만 지원하는 Mysql 문자 세트입니다.

Mysql에서 4바이트 길이의 UTF-8 문자를 저장하려면 UTF8MB4 문자 세트를 사용해야 하지만 5.5 문자만 사용해야 합니다.3가지 버전이 지원되는 경우(버전 표시:버전();)을 선택합니다.호환성을 높이기 위해서는 항상 UTF8이 아닌 UTF8MB4를 사용해야 한다고 생각합니다.char 타입 데이터의 경우 UTF8MB4는 더 많은 공간을 소비하며 mysql의 공식 권장사항에 따라 char 대신 VARCHAR을 사용합니다.

MariaDB utf8mb4에서는 서버 설정에서 명시적으로 설정되지 않은 경우 기본 CHARSET으로 사용되므로 COLATE utf8mb4_unicode_ci가 사용됩니다.

MariaDB CHARSET & COLATE 클릭 참조

CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

언급URL : https://stackoverflow.com/questions/30074492/what-is-the-difference-between-utf8mb4-and-utf8-charsets-in-mysql

반응형