IT

UTF-8 : 일반?

lottoking 2020. 3. 26. 08:31
반응형

UTF-8 : 일반? 큰 상자? 유니 코드?


다양한 유형의 데이터에 어떤 데이터 정렬을 사용 해야하는지 파악하려고합니다. 내가 저장할 콘텐츠의 100 %가 사용자가 제출했습니다.

내 이해는 UTF-8 이진 대신 UTF-8 General CI (Case-Insensitive)를 사용해야한다는 것입니다. 그러나 UTF-8 General CI와 UTF-8 Unicode CI의 명확한 차이점을 찾을 수 없습니다.

  1. 사용자가 제출 한 컨텐츠를 UTF-8 General 또는 UTF-8 Unicode CI 열에 저장해야합니까?
  2. UTF-8 바이너리는 어떤 유형의 데이터에 적용됩니까?

일반적으로 utf8_general_ciutf8_unicode_ci 보다 빠르지 만 덜 정확합니다.

차이점은 다음과 같습니다.

유니 코드 문자 집합의 경우 _general_ci 데이터 정렬을 사용하여 수행 된 작업은 _unicode_ci 데이터 정렬보다 빠릅니다 . 예를 들어, utf8_general_ci 데이터 정렬에 대한 비교는 utf8_unicode_ci에 대한 비교보다 빠르지 만 약간 덜 정확합니다. 그 이유는 utf8_unicode_ci가 확장과 같은 맵핑을 지원하기 때문입니다. 즉, 한 문자가 다른 문자의 조합과 같을 때. 예를 들어 독일어 및 일부 다른 언어에서 "ß"는 "ss"와 같습니다. utf8_unicode_ci는 수축 및 무시할 수있는 문자도 지원합니다. utf8_general_ci는 확장, 축소 또는 무시할 수없는 문자를 지원하지 않는 레거시 데이터 정렬입니다. 문자를 일대일로 비교할 수 있습니다.

인용 : http://dev.mysql.com/doc/refman/5.0/en/charset-unicode-sets.html

자세한 설명은 MySQL 포럼에서 다음 게시물을 읽으십시오. http://forums.mysql.com/read.php?103,187048,188748

utf8_bin의 경우 : utf8_general_ciutf8_unicode_ci 는 대소 문자를 구분하지 않는 비교를 수행합니다. 반대로, utf8_bin은 문자 의 이진 값을 비교하기 때문에 대소 문자를 구분합니다 (다른 차이점 중에서도).


varchar 필드를 고유 또는 기본 인덱스로 'a'및 'á'와 같은 2 개의 값을 삽입 할 때 utf8_general_ci를 사용하면 중복 키 오류가 발생한다는 사실도 알고 있어야합니다.


  • utf8_bin비트를 맹목적으로 비교합니다. 케이스 접기, 악센트 제거 없음.
  • utf8_general_ci1 바이트와 1 바이트를 비교합니다. 접는 경우 악센트 제거는 수행하지만 두 문자 비교 ij는 없습니다 : ij이 데이터 정렬에서 동일하지 않습니다 .
  • utf8_*_ci언어 별 규칙 세트이지만 그렇지 않은 경우와 같습니다 unicode_ci. 일부 특별한 경우 : Ç, Č, ch,ll
  • utf8_unicode_ci비교를 위해 이전 유니 코드 표준을 따릅니다. ij= ij, 그러나 ae! =æ
  • utf8_unicode_520_ci최신 유니 코드 표준을 따릅니다. ae=æ

다양한 utf8 데이터 정렬과 동일한 기능에 대한 자세한 내용 데이터 정렬 차트참조하십시오 .

utf8, MySQL이 정의 1- 3 바이트 UTF8 코드로 한정된다. 이모 지와 일부 중국어는 제외됩니다. utf8mb4유럽을 훨씬 넘어서고 싶다면 실제로 전환해야합니다 .

위의 사항은 utf8mb4적절한 철자 변경 후에 적용됩니다 . 앞으로 utf8mb4utf8mb4_unicode_520_ci선호된다.

  • utf16 및 utf32는 utf8의 변형입니다. 사실상 그것들을 사용하지 않습니다.
  • ucs2는 "utf8"보다 "Unicode"에 더 가깝습니다. 사실상 사용하지 않습니다.

실제로 고유 인덱스가 있는 열에 'é'및 'e'와 같은 값을 저장하는 것을 테스트 했으며 'utf8_unicode_ci'와 'utf8_general_ci'에서 중복 오류가 발생했습니다. 'utf8_bin'조합 열에 만 저장할 수 있습니다.

그리고 mysql 문서 ( http://dev.mysql.com/doc/refman/5.7/en/charset-applications.html )는 예제 세트 'utf8_general_ci'조합을 제안합니다.

[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci

허용되는 답변이 오래되었습니다.

MySQL 5.5.3 이상을 사용하는 경우 사용자가 입력 한 문자에 오류가 발생하지 않도록 utf8mb4_unicode_ci대신 사용 utf8_unicode_ci하십시오.

utf8mb4예를 들어 이모티콘을 지원하지만 utf8다음과 같은 수백 가지 인코딩 관련 버그가 발생할 수 있습니다.

Incorrect string value: ‘\xF0\x9F\x98\x81…’ for column ‘data’ at row 1

참고 URL : https://stackoverflow.com/questions/2344118/utf-8-general-bin-unicode

반응형