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




collation default (5)

  • utf8_bin 은 맹목적으로 비트를 비교합니다. 케이스 접기, 악센트 스트리핑 없음.
  • utf8_general_ci 는 1 바이트를 1 바이트와 비교합니다. 대 / 소문자 구분 악센트 제거를 수행하지만 2 문자 비교는 없습니다. ij 는이 조합에서 not와 같지 않습니다.
  • utf8_*_ci 는 언어 별 규칙 집합이지만 unicode_ci 와 유사합니다. 특별한 경우 : Ç , Č , ch , ll
  • utf8_unicode_ci 는 비교를 위해 오래된 유니 코드 표준을 따릅니다. ij = ij ,하지만 ae ! = æ
  • utf8_unicode_520_ci 는 새로운 유니 코드 표준을 따릅니다. ae = æ

다양한 utf8 데이터 정렬에서 무엇이 동일한 지에 대한 자세한 내용은 데이터 정렬 차트 를 참조하십시오.

utf8 은 1에서 3 바이트의 utf8 코드로 제한됩니다. 이모티콘과 일부 중국어가 제외됩니다. 따라서 유럽을 훨씬 넘어 utf8mb4 싶다면 utf8mb4 전환해야합니다.

위의 사항은 맞춤법을 변경 한 후 utf8mb4 적용됩니다. 앞으로 utf8mb4utf8mb4_unicode_520_ci 가 좋습니다.

  • utf16 및 utf32는 utf8의 변형입니다. 그 (것)들을위한 실제로 아무 사용법도 없다.
  • ucs2는 "utf8"보다 "유니 코드"에 더 가깝습니다. 그것을 실제로 사용하지 않습니다.

다양한 유형의 데이터에 대해 사용해야하는 조합을 파악하려고합니다. 내가 저장할 콘텐츠의 100 %는 사용자가 제출 한 것입니다.

내 이해는 UTF-8 이진 대신 UTF-8 일반 CI (대소 문자를 구분하지 않음)를 사용해야한다는 것입니다. 그러나 UTF-8 일반 CI와 UTF-8 Unicode CI를 명확하게 구분할 수는 없습니다.

  1. UTF-8 일반 또는 UTF-8 유니 코드 CI 열에 사용자 제출 콘텐츠를 저장해야합니까?
  2. UTF-8 바이너리는 어떤 유형의 데이터에 적용될 수 있습니까?

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


정말로 ' 고유 한 인덱스가있는 열에'é '및'e '와 같은 값을 저장했는데'utf8_unicode_ci '및'utf8_general_ci '에서 중복 오류가 발생합니다. 'utf8_bin'조합 열에 만 저장할 수 있습니다.

그리고 mysql docs ( 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

일반적으로 utf8_general_ciutf8_unicode_ci 보다 빠르지 만 정확하지는 않습니다.

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

모든 유니 코드 문자 집합의 경우 _general_ci 데이터 정렬을 사용하여 수행 된 작업이 _unicode_ci 데이터 정렬의 작업보다 빠릅니다 . 예를 들어, utf8_unicode_ci에 대한 비교보다 utf8_general_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 . http://forums.mysql.com/read.php?103,187048,188748

utf8_bin의 경우 : utf8_general_ciutf8_unicode_ci 는 대소 문자를 구분하지 않고 비교를 수행합니다. 대다수의 utf8_bin은 문자 의 이진 값을 비교하기 때문에 다른 차이점과 마찬가지로 대소 문자를 구분 합니다.


유니 코드 는 모든 언어의 문자를 코드 포인트 라는 특정 숫자 값에 매핑하는 표준입니다. 이유는 동일한 코드 포인트 세트를 사용하여 다른 인코딩을 가능하게하기 때문입니다.

UTF-8 및 UTF-16은 이러한 두 가지 인코딩입니다. 코드 포인트를 입력으로 사용하고 잘 정의 된 수식을 사용하여 인코딩하여 인코딩 된 문자열을 생성합니다.

특정 인코딩 선택은 요구 사항에 따라 다릅니다. 서로 다른 인코딩에는 서로 다른 메모리 요구 사항이 있으며 처리 할 문자에 따라 최소한의 바이트 시퀀스를 사용하여 해당 문자를 인코딩하는 인코딩을 선택해야합니다.

유니 코드, UTF-8 및 UTF-16에 대한 자세한 내용은이 기사를 체크 아웃 할 수 있습니다.

모든 프로그래머가 유니 코드에 대해 알아야 할 사항





mysql utf-8 collation