Loading...
MySQL 9.5 Reference Manual 9.5의 12.13 Adding a Character Set의 한국어 번역본입니다.
아래의 경우에 피드백에서 신고해주신다면 반영하겠습니다.
감사합니다 :)
12.13.1 Character Definition Arrays 12.13.2 String Collating Support for Complex Character Sets 12.13.3 Multi-Byte Character Support for Complex Character Sets
이 섹션에서는 MySQL에 문자 집합을 추가하는 절차에 대해 설명합니다. 올바른 절차는 해당 문자 집합이 단순한지 복잡한지에 따라 달라집니다:
문자 집합이 정렬을 위한 특별한 문자열 정렬 루틴을 필요로 하지 않고, 멀티바이트 문자 지원도 필요로 하지 않는다면, 단순합니다.
위 두 가지 기능 중 하나라도 필요로 한다면, 복잡합니다.
예를 들어, greek 및 swe7은 단순 문자 집합이고, big5 및 czech는 복잡한 문자 집합입니다.
다음 지침을 사용하려면 MySQL 소스 배포본이 있어야 합니다. 지침에서 MYSET 은 추가하려는 문자 집합의 이름을 나타냅니다.
MYSET 에 대해 <charset> 요소를 sql/share/charsets/Index.xml 파일에 추가합니다. 이 파일에 이미 있는 내용을 참고하여 새 내용을 추가합니다. latin1의 <charset> 요소에 대한 일부 목록은 다음과 같습니다:1<charset name="latin1"> 2 <family>Western</family> 3 <description>cp1252 West European</description> 4 ... 5 <collation name="latin1_swedish_ci" id="8" order="Finnish, Swedish"> 6 <flag>primary</flag> 7 <flag>compiled</flag> 8 </collation> 9 <collation name="latin1_danish_ci" id="15" order="Danish"/> 10 ... 11 <collation name="latin1_bin" id="47" order="Binary"> 12 <flag>binary</flag> 13 <flag>compiled</flag> 14 </collation> 15 ... 16</charset>
<charset> 요소는 해당 문자 집합의 모든 콜레이션을 나열해야 합니다. 여기에는 최소한 바이너리 콜레이션과 기본(프라이머리) 콜레이션이 포함되어야 합니다. 기본 콜레이션은 종종 general_ci(general, case-insensitive) 접미사를 사용하여 이름을 정합니다. 바이너리 콜레이션이 기본 콜레이션이 되는 것도 가능하지만, 일반적으로 이 둘은 다릅니다. 기본 콜레이션에는 primary 플래그가 있어야 합니다. 바이너리 콜레이션에는 binary 플래그가 있어야 합니다.
각 콜레이션에는 고유한 ID 번호를 지정해야 합니다. ID 범위 1024에서 2047까지는 사용자 정의 콜레이션을 위해 예약되어 있습니다. 현재 사용 중인 콜레이션 ID의 최댓값을 찾으려면 다음 쿼리를 사용합니다:
1SELECT MAX(ID) FROM INFORMATION_SCHEMA.COLLATIONS;
단순 문자 집합의 경우, 문자 집합 속성을 설명하는 구성 파일 MYSET.xml을 생성합니다. 이 파일은 sql/share/charsets 디렉터리에 생성합니다. 이 파일의 기반으로 latin1.xml의 사본을 사용할 수 있습니다. 이 파일의 구문은 매우 단순합니다:
주석은 일반적인 XML 주석
(<!-- text -->)으로 작성합니다.
<map> 배열 요소 안의 워드는 임의의 양의 공백으로 구분됩니다.
<map> 배열 요소 안의 각 워드는 16진수 형식의 숫자여야 합니다.
<ctype> 요소에 대한 <map> 배열 요소는 257개의 워드를 가집니다. 그 뒤의 다른 <map> 배열 요소는 256개의 워드를 가집니다. Section 12.13.1, “Character Definition Arrays”를 참조하십시오.
Index.xml의 해당 문자 집합에 대한 <charset> 요소에 나열된 각 콜레이션에 대해, MYSET.xml에는 문자 정렬을 정의하는 <collation> 요소가 포함되어야 합니다.
복잡한 문자 집합의 경우, 문자 집합 속성을 설명하고, 해당 문자 집합에 대해 올바르게 동작을 수행하는 데 필요한 지원 루틴을 정의하는 C 소스 파일을 생성합니다:
strings 디렉터리에
ctype-MYSET.c
파일을 생성합니다. 어떤 내용을 정의해야 하는지 보려면 기존의 ctype-*.c 파일들(예: ctype-big5.c)을 확인합니다. 파일의 배열 이름은 ctype_MYSET, to_lower_MYSET 등과 같은 형태여야 합니다. 이는 단순 문자 집합에 대한 배열에 대응합니다. Section 12.13.1, “Character Definition Arrays”를 참조하십시오.
Index.xml의 해당 문자 집합에 대한 <charset> 요소 안에 나열된 각 <collation> 요소에 대해, ctype-MYSET.c 파일은 해당 콜레이션의 구현을 제공해야 합니다.
문자 집합이 문자열 정렬 함수를 필요로 하는 경우, Section 12.13.2, “String Collating Support for Complex Character Sets”를 참조하십시오.
문자 집합이 멀티바이트 문자 지원을 필요로 하는 경우, Section 12.13.3, “Multi-Byte Character Support for Complex Character Sets”를 참조하십시오.
구성 정보의 수정을 수행합니다. 기존 구성 정보를 참고하여 MYSYS 에 대한 정보를 추가합니다. 여기의 예는 문자 집합에 기본 및 바이너리 콜레이션이 있다고 가정하지만, MYSET 에 추가 콜레이션이 있다면 더 많은 줄이 필요합니다.
mysys/charset-def.c를 수정하여 새 문자 집합에 대한 콜레이션을 “등록”합니다.
“declaration” 섹션에 다음 줄을 추가합니다:
1#ifdef HAVE_CHARSET_MYSET 2extern CHARSET_INFO my_charset_MYSET_general_ci; 3extern CHARSET_INFO my_charset_MYSET_bin; 4#endif
“registration” 섹션에 다음 줄을 추가합니다:
1#ifdef HAVE_CHARSET_MYSET 2 add_compiled_collation(&my_charset_MYSET_general_ci); 3 add_compiled_collation(&my_charset_MYSET_bin); 4#endif
문자 집합이
ctype-MYSET.c
를 사용하는 경우, strings/CMakeLists.txt를 수정하고
STRINGS_SOURCES 변수 정의에
ctype-MYSET.c
를 추가합니다.
cmake/character_sets.cmake를 수정합니다:
알파벳 순서로 CHARSETS_AVAILABLE 값에 MYSET 을 추가합니다.
알파벳 순서로 CHARSETS_COMPLEX 값에 MYSET 을 추가합니다. 이는 단순 문자 집합의 경우에도 필요합니다. 그래야 CMake가 -DDEFAULT_CHARSET=MYSET를 인식할 수 있습니다.
재설정(reconfigure), 재컴파일(recompile) 및 테스트를 수행합니다.
12.12 Setting the Error Message Language
12.13.1 Character Definition Arrays