10.3 문자 세트 추가
이 섹션에서는 MySQL에 문자 집합을 추가하는 방법에 대해 설명합니다. 적절한 절차는 문자 세트가 단순하거나 복잡한 지에 따라 달라집니다.
정렬에 특별한 문자열 비교 루틴을 필요로하지 않고 멀티 바이트 문자의 지원을 필요로하지 않는 문자 세트가 단순한 캐릭터 세트입니다.
이러한 두 가지 기능이 필요한 캐릭터 세트가 복잡한 문자 집합입니다.
예를 들어, greek
과 swe7
은 단순한 캐릭터 세트이지만, big5
와 czech
는 복잡한 문자 집합입니다.
다음 단계를 사용하려면 MySQL 소스 배포판이 필요합니다. 이 단계에서는 MYSET
은 추가 문자 집합의 이름을 나타냅니다.
MYSET
의<charset>
요소를sql/share/charsets/Index.xml
파일에 추가합니다. 파일 기존 내용을 새로운 내용을 추가하기위한 가이드로 사용합니다.latin1
<charset>
요소 목록 중 일부는 다음과 같습니다.<charset name = "latin1"> <family> Western </ family> <description> cp1252 West European </ description> ... <collation name = "latin1_swedish_ci"id = "8"order = "Finnish, Swedish"> <flag> primary </ flag> <flag> compiled </ flag> </ collation> <collation name = "latin1_danish_ci"id = "15"order = "Danish"/> ... <collation name = "latin1_bin"id = "47"order = "Binary"> <flag> binary </ flag> <flag> compiled </ flag> </ collation> ... </ charset>
<charset>
요소는 문자 세트의 모든 데이터 정렬을 나열합니다. 여기에는 적지도 이진 데이터 정렬과 기본 (기본) 데이터 정렬이 포함되어 있습니다. 기본 데이터 정렬은 종종general_ci
(일반 대소 문자 구분)의 접미사를 사용하여 이름을 붙일 수 있습니다. 이진 데이터 정렬을 기본 데이터 정렬하는 것은 가능하지만, 일반적으로이 다릅니다. 기본 데이터 정렬은primary
플래그를 지정해야합니다. 이진 데이터 정렬은binary
플래그를 지정해야합니다.각각의 데이터 정렬에 고유 한 ID 번호를 할당해야합니다. 1024에서 2047의 ID 범위는 사용자 정의 데이터 정렬에 예약되어 있습니다. 현재 사용되는 데이터 정렬 ID의 최대 값을 검색하려면 다음 쿼리를 사용합니다.
SELECT MAX (ID) FROM INFORMATION_SCHEMA.COLLATIONS;
이 단계는 추가하는 것이 간단한 문자 집합 또는 복잡한 문자 집합에 따라 달라집니다. 간단한 문자 세트는 구성 파일 만 필요하지만 복잡한 문자 세트에는 데이터 정렬 함수 또는 멀티 바이트 함수 혹은 그 양쪽 모두를 정의하는 C 소스 파일이 필요합니다.
간단한 문자 집합의 경우 문자 집합 등록 정보를 담은 구성 파일 (
)을 만듭니다.MYSET
.xmlsql/share/charsets
디렉토리에이 파일을 만듭니다. 이 파일 토대로latin1.xml
의 사본을 사용할 수 있습니다. 파일의 구문은 매우 간단합니다.댓글은 일반 XML 주석 (
<!--
)로 묘사됩니다.text
--><map>
배열 요소의 단어는 임의의 수의 공백에 의해 구분됩니다.<map>
배열 요소의 각 단어는 16 진수의 수치로 나타내야합니다.<ctype>
요소의<map>
배열 요소에는 257 단어가 포함되어 있습니다. 그 후 다른<map>
배열 요소에는 256 단어가 포함되어 있습니다. 섹션 10.3.1 "문자 정의 배열" 을 참조하십시오.Index.xml
의 문자 세트에<charset>
요소에 나열 된 데이터 정렬에 대해 문자의 순서를 정의하는<collation>
요소를
에 포함해야합니다.MYSET
.xml
복잡한 문자 집합의 경우, 캐릭터 세트 특성에 대해 설명하고 문자 집합에 대한 연산을 제대로 실행하는 데 필요한 지원 루틴을 정의하는 C 소스 파일을 만듭니다.
strings
디렉토리에ctype-
파일을 만듭니다. 기존의MYSET
.cctype-*.c
파일 중 하나 (ctype-big5.c
등)을 조사하여 정의 할 필요가있는 것을 확인합니다. 파일의 배열은ctype_
,MYSET
to_lower_
등의 이름을 붙일 필요가 있습니다. 이들은 단순한 캐릭터 세트의 배열에 대응합니다. 섹션 10.3.1 "문자 정의 배열" 을 참조하십시오.MYSET
Index.xml
의 문자 세트에<charset>
요소에 나열 된<collation>
요소마다ctype-
파일이 데이터 정렬의 구현을 제공해야합니다.MYSET
.c문자 집합 문자열 비교 함수가 필요한 경우 섹션 10.3.2 "복잡한 문자 세트의 문자열 조합의 지원" 을 참조하십시오.
문자 세트에서 멀티 바이트 문자의 지원이 필요한 경우 섹션 10.3.3 "복잡한 문자 세트의 멀티 바이트 문자의 지원" 을 참조하십시오.
구성 정보를 변경합니다.
MYSYS
정보를 추가하기위한 가이드로 기존의 구성 정보를 사용합니다. 이 예에서는 문자 세트에 기본 데이터 정렬과 이진 데이터 정렬이 있다고 가정하고 있습니다 만,MYSET
에 추가 데이터 정렬이있는 경우에는 더 많은 행이 필요합니다.mysys/charset-def.c
을 편집하여 새 문자 집합의 정렬 순서를 "등록"합니다."선언"섹션에 다음 줄을 추가합니다.
#ifdef HAVE_CHARSET_
MYSET
extern CHARSET_INFO my_charset_MYSET
_general_ci; extern CHARSET_INFO my_charset_MYSET
_bin; #endif"등록"섹션에 다음 줄을 추가합니다.
#ifdef HAVE_CHARSET_
MYSET
add_compiled_collation (& my_charset_MYSET
_general_ci); add_compiled_collation (& my_charset_MYSET
_bin); #endif문자 세트가
ctype-
를 사용하는 경우MYSET
.cstrings/CMakeLists.txt
을 편집하여ctype-
를MYSET
.cSTRINGS_SOURCES
변수의 정의에 추가합니다.cmake/character_sets.cmake
을 편집합니다.알파벳순으로
CHARSETS_AVAILABLE
값에MYSET
을 추가합니다.알파벳순으로
CHARSETS_COMPLEX
값에MYSET
을 추가합니다. 이것은 단순한 캐릭터 세트도 필요합니다. 없으면 CMake는-DDEFAULT_CHARSET=
를 인식하지 않습니다.MYSET
재구성하고 재 컴파일하고 테스트합니다.