문자 집합과 대조는 정확히 무엇을 의미합니까?
MySQL 문서를 읽을 수 있고 매우 명확합니다.그런데 어떤 문자 집합을 사용할지 어떻게 결정하나요?대조는 어떤 데이터에 영향을 미칩니까?
두 가지에 대한 설명과 선택 방법을 묻고 있습니다.
MySQL 문서에서:
문자 집합은 기호 및 인코딩 집합입니다.대조는 문자 집합의 문자를 비교하기 위한 규칙 집합입니다.가상 문자 집합의 예를 들어 구별을 명확히 해 봅시다.
A, B, a, b의 네 글자를 가진 알파벳이 있다고 가정해 보자.각 문자에는 'A' = 0, 'B' = 1, 'a' = 2, 'b' = 3의 숫자를 지정합니다.문자 'A'는 기호, 숫자 0은 'A'의 부호화, 4개의 문자와 그 부호화의 조합은 문자 집합입니다.
이제 두 문자열 값인 'A'와 'B'를 비교한다고 가정해 보겠습니다.가장 간단한 방법은 인코딩을 살펴보는 것입니다. 'A'는 0, 'B'는 1입니다.0은 1보다 작기 때문에 A는 B보다 작다고 합니다.방금 한 작업은 캐릭터 세트에 대조 작업을 적용한 것입니다.규칙의 가벼운 식사 집합이다(이 사건에서 유일한 규칙):."인코딩에 비교했다."우리는 이 모든 가능한 collations의 가장 단순한 이진 대조라고 부른다.
하지만 만약 그 문자열을 소문자와 대문자 글자 같다 하시나요?그럼:(1)은 소문자'와 'b'''A로 ''B' 온 것으로 대하(2) 다음 인코딩을 비교하다 적어도 두가지 규칙이 있을 것이다.우리는 이것은 대/소문자를 구분 수집 분석이라고 부른다.좀 더 이진 한부씩 인쇄보다 복잡한 겁니다.
실제 생활에서, 대부분의 문자 집합 많은 등장 인물들 뿐만 아니라 트레일러 키트 포함과 'B지만 전체 알파벳, 때때로 여러 알파벳 또는 수천명의 캐릭터들이 동부에 동이 쓰기 시스템들, 많은 특별한 상징과 구두점과 함께 가지고 있다.또한 실생활에서, 대부분의 collations 아닙니다. 만약 불감라 말투 무감각(한"악센트"은 마크를 캐릭터 독일 'ö의에서로 첨부)과multiple-character 매핑(하나를 두 독일 collations에의)'OE''ö은 규칙 같은) 많은 규칙을 가지고 있다.
문자 인코딩은 문자를 메모리에 맞게 인코딩하는 방법입니다.즉, 문자 집합이 ISO-8859-15일 경우 유로 기호 €는 0xa4로 인코딩되며 UTF-8에서는 0xe282ac이 됩니다.
대조는 문자를 비교하는 방법이며, latin9에는 다음과 같은 문자가 있습니다.e é è ê f
바이너리 표현에 따라 정렬되면, 이 값은 다음과 같이 됩니다.e f é ê è
예를 들어 프랑스어로 설정하면 생각대로 순서대로 정렬할 수 있습니다.e é è ê
동등하고, 그 다음에f
.
문자 집합은 모든 문자 문자의 하위 집합입니다.문자 인코딩은 이러한 문자를 숫자 값에 매핑하는 방법을 지정합니다.UTF-8이나 UTF-16 등의 일부 문자 인코딩은 유니버설문자 집합 내의 임의의 문자를 인코딩할 수 있습니다.US-ASCII 또는 ISO-8859-1과 같은 다른 제품은 문자당 각각7비트와 8비트를 사용하기 때문에 작은 서브셋만 인코딩할 수 있습니다.많은 표준이 문자 집합과 문자 인코딩을 모두 지정하기 때문에 "문자 집합"이라는 용어는 종종 "문자 인코딩" 대신 자유롭게 대체됩니다.
조합은 정렬을 위해 문자를 비교하는 방법을 지정하는 규칙으로 구성됩니다.대조 규칙은 로케일 고유할 수 있습니다.2 문자의 적절한 순서는 언어마다 다릅니다.
문자 집합과 대조는 애플리케이션이 국제화되었는지 여부에 따라 결정됩니다.그렇지 않은 경우 어떤 로케일을 대상으로 합니까?
지원하는 문자 집합을 선택하려면 응용 프로그램을 고려해야 합니다.사용자 제공 입력을 저장하는 경우 소프트웨어가 최종적으로 사용되는 모든 로케일을 예측하기 어려울 수 있습니다.모든 것을 지원하려면 처음부터 UCS(Unicode)를 지원하는 것이 가장 좋습니다.하지만 여기에는 비용이 듭니다. 많은 서유럽 문자는 이제 1자당 2바이트의 스토리지가 필요합니다.
올바른 데이터 정렬을 선택하면 데이터베이스가 데이터 정렬을 사용하여 인덱스를 만들고 나중에 해당 인덱스를 사용하여 정렬된 결과를 제공하는 경우 성능에 도움이 됩니다.단, 대조규칙은 로케일 고유의 경우가 많기 때문에 다른 로케일의 규칙에 따라 결과를 정렬해야 할 경우 해당 인덱스는 무용지물이 됩니다.
사용할 것을 권장합니다.utf8mb4_unicode_ci
이는 Unicode의 정렬 및 비교 표준을 기반으로 하며 매우 광범위한 언어로 정확하게 정렬됩니다.
언급URL : https://stackoverflow.com/questions/341273/what-does-character-set-and-collation-mean-exactly
'programing' 카테고리의 다른 글
외부 키 제약을 적용하지 않는 mysqldump 파일을 자동으로 만들 수 있습니까? (0) | 2022.09.24 |
---|---|
AWS SDK for PHP: 인스턴스 프로파일 메타데이터 서버에서 자격 증명을 검색하는 동안 오류가 발생했습니다. (0) | 2022.09.24 |
Twitter API 버전 1.1에서 user_timeline을 검색하는 가장 간단한 PHP 예제 (0) | 2022.09.24 |
URI를 의도에 전달하려면 어떻게 해야 합니까? (0) | 2022.09.21 |
Javascript에서 숫자를 반올림하려면 어떻게 해야 하나요? (0) | 2022.09.21 |