Loading...
MySQL 9.5 Reference Manual 9.5의 12.1 Character Sets and Collations in General의 한국어 번역본입니다.
아래의 경우에 피드백에서 신고해주신다면 반영하겠습니다.
감사합니다 :)
문자 집합(character set)은 기호와 인코딩의 집합입니다. 정렬 규칙(collation)은 문자 집합 안에서 문자를 비교하기 위한 규칙들의 집합입니다. 가상의 문자 집합 예제를 통해 이 둘의 차이를 명확히 해 보겠습니다.
네 개의 문자로 이루어진 알파벳이 있다고 가정해 봅시다: A, B, a, b. 각 문자에 숫자를 부여합니다: A = 0, B = 1, a = 2, b = 3. 문자 A는 기호이고, 숫자 0은 A에 대한 인코딩이며, 네 문자 전체와 그 인코딩의 조합은 문자 집합입니다.
두 개의 문자열 값 A와 B를 비교하고 싶다고 가정해 봅시다. 이를 수행하는 가장 단순한 방법은 인코딩을 보는 것입니다: A는 0이고 B는 1입니다. 0이 1보다 작기 때문에, A가 B보다 작다고 말합니다. 방금 우리가 한 일은 문자 집합에 정렬 규칙을 적용한 것입니다. 정렬 규칙은 규칙들의 집합입니다 (이 경우 규칙은 하나뿐입니다): “인코딩을 비교한다.” 이 가장 단순한 형태의 모든 가능한 정렬 규칙을 바이너리 정렬 규칙(binary collation)이라고 부릅니다.
하지만 소문자와 대문자를 동등하게 취급하고 싶다면 어떻게 할까요? 그렇다면 최소한 두 가지 규칙을 가져야 합니다: (1) 소문자 a와 b를 각각 A와 B와 동등하게 취급한다; (2) 그다음 인코딩을 비교한다. 이를 대소문자 구분 없는 정렬 규칙(case-insensitive collation)이라고 부릅니다. 이는 바이너리 정렬 규칙보다 조금 더 복잡합니다.
현실에서는 대부분의 문자 집합에는 많은 문자가 있습니다: A와 B뿐만 아니라 전체 알파벳, 때로는 여러 알파벳이나 수천 개의 문자를 가진 동아시아 문자 체계, 그리고 많은 특수 기호와 구두점이 포함됩니다. 또한 현실에서는 대부분의 정렬 규칙에는 많은 규칙이 있으며, 단지 대소문자를 구분할지 여부뿐 아니라, 악센트를 구분할지 여부 (여기서 “accent”는 독일어 Ö와 같이 문자에 붙는 기호를 뜻합니다), 그리고 복수 문자 매핑 (두 개의 독일어 정렬 규칙 중 하나에서 Ö = OE라는 규칙과 같은 것)을 위한 규칙도 포함됩니다.
MySQL은 다음과 같은 작업을 수행할 수 있습니다:
다양한 문자 집합을 사용하여 문자열을 저장합니다.
다양한 정렬 규칙을 사용하여 문자열을 비교합니다.
서로 다른 문자 집합 또는 정렬 규칙을 갖는 문자열을 동일한 서버, 동일한 데이터베이스, 심지어 동일한 테이블 안에서 섞어서 사용할 수 있습니다.
어떤 레벨에서든 문자 집합과 정렬 규칙을 지정할 수 있습니다.
이 기능들을 효과적으로 사용하려면, 어떤 문자 집합과 정렬 규칙이 사용 가능한지, 기본값을 어떻게 변경하는지, 그리고 이들이 문자열 연산자와 함수의 동작에 어떤 영향을 미치는지를 알아야 합니다.
12 Character Sets, Collations, Unicode
12.2 Character Sets and Collations in MySQL