10.4.4.2 MySQL에서 지원되는 LDML 구문
이 섹션에서는 MySQL이 인식 LDML 구문에 대해 설명합니다. 이것은 http://www.unicode.org/reports/tr35/ 에서 구할 수 LDML 사양에서 설명 된 구문의 부분 집합이며, 자세한 내용은이 사양을 참조하십시오. MySQL은 큰 구문의 부분 집합을 인식하기 때문에 종종 Unicode 공통 로케일 데이터 저장소에서 데이터 정렬 정의를 다운로드하여 해당 부분 ( <rules> 태그와 </rules> 태그 사이의 부분 )를 MySQL Index.xml 파일에 붙여 넣을 수 있습니다. 여기서 설명하는 규칙은 문자의 정렬이 기본 레벨로 진행되는 것을 제외한 모든 지원됩니다. 보조 이상의 정렬 수준에서 차이를 지정하는 규칙은 인식되지만 (예를 들어, 데이터 정렬의 정의에 포함 할 수 있습니다) 기본 수준에 등호로 처리됩니다.
MySQL Server는 Index.xml 파일의 구문 분석 중 문제가 발견되면 진단을 생성합니다. 섹션 10.4.4.3 "Index.xml의 구문 분석 중 진단" 을 참조하십시오.
문자 표현
LDML 규칙 이름이 붙은 문자는 문자 적 또는 \u 형식으로 쓸 수 있습니다. 그러나 nnnnnnnn 는 16 진수 Unicode 코드 포인트입니다. 예를 들어, A 와 á 은 문자 그대로 또는 \u0041 와 \u00E1 로 쓸 수 있습니다. 16 진수 값에서 A 에서 F 숫자는 대소 문자를 구별하지 않습니다. \u00E1 와 \u00e1 것은 동일합니다. UCA 4.0.0 데이터 정렬의 경우 16 진수는 Basic Multilingual Plane 문자에만 사용할 수 있으며 0000 에서 FFFF 의 BMP 범위 밖의 문자는 사용할 수 없습니다. UCA 5.2.0 데이터 정렬의 경우 16 진수를 모든 문자에 사용할 수 있습니다.
Index.xml 파일 자체는 UTF-8 인코딩을 사용하여 작성해야합니다.
구문 규칙
LDML에는 문자 순서를 지정 재설정 규칙 및 이동 규칙이 있습니다. 순서 부는 기준점을 설정하는 재설정 규칙에서 시작하여 그 기준점을 기준으로 문자를 정렬하는 방법을 보여 시프트 규칙이 계속되는 일련의 규칙으로 지정됩니다.
<reset>규칙은 그 자체로는 어떤 순서 지정도 지정하지 않습니다. 그 대신 이것은 소정의 문자와 관련하여 후속 시프트 규칙을 수행 할 수 있도록 순서를 "재설정"합니다. 다음 두 규칙도 문자'A'와 관련하여 실행되도록 후속 시프트 규칙을 재설정합니다.<reset> A </ reset> <reset> \ u0041 </ reset>
<p><<s>및<t>의 시프트 규칙은 문자와 문자의 초등, 중등 및 3 차의 차이를 정의합니다.주의 차이를 사용하여 개별 문자를 구분합니다.
보조 차이를 사용하여 악센트 변형을 구분합니다.
3 차의 차이를 사용하여, 대문자와 소문자의 변형을 구분합니다.
다음 두 규칙도
'G'문자의 기본 이동 규칙을 지정합니다.<p> G </ p> <p> \ u0047 </ p>
<i>시프트 규칙은 문자가 다른 문자와 동일하게 정렬하도록 지정합니다. 다음의 규칙은'b'가'a'와 같이 정렬합니다.<reset> a </ reset> <i> b </ i>
약기 된 시프트 구문은 태그의 단일 쌍을 사용하여 여러 시프트 규칙을 지정합니다. 다음 표는 단축 된 구문 규칙과 동등한 약기 않은 규칙과 대응을 나타냅니다.
표 10.2 약기 된 시프트 구문
약기 된 구문 약기 않은 구문 <pc>xyz</pc><p>x</p><p>y</p><p>z</p><sc>xyz</sc><s>x</s><s>y</s><s>z</s><tc>xyz</tc><t>x</t><t>y</t><t>z</t><ic>xyz</ic><i>x</i><i>y</i><i>z</i>확장 형식은 여러 문자의 시퀀스의 기준점을 설정하는 초기화 규칙입니다. MySQL은 2에서 6 자 길이의 확장 형식을 지원합니다. 다음 규칙은 기본 수준
'z'를 3 문자 시퀀스'abc'보다 크게합니다.<reset> abc </ reset> <p> z </ p>
단축 형식은 여러 문자의 시퀀스를 정렬하는 시프트 규칙입니다. MySQL은 2에서 6 자 길이의 단축 형식을 지원합니다. 다음 규칙은 기본 수준에서 3 문자 시퀀스
'xyz'를'a'보다 크게합니다.<reset> a </ reset> <p> xyz </ p>
긴 확장 형식과 긴 단축 형식을 함께 사용할 수 있습니다. 다음 규칙은 기본 수준에서 3 문자 시퀀스
'xyz'을 3 문자 시퀀스'abc'보다 크게합니다.<reset> abc </ reset> <p> xyz </ p>
일반적으로 확장 형식의 구문은
<x>와<extend>요소를 사용하여 확장 형식을 지정합니다. 다음 규칙은 보조 수준에서 문자'k'를 시퀀스'ch'보다 크게합니다. 즉,'k'는'c'에'h'가 계속 된 뒤의 문자에 확장 한 것처럼 작동합니다.<reset> c </ reset> <x> <s> k </ s> <extend> h </ extend> </ x>
이 구문은 긴 시퀀스를 허용합니다. 다음 규칙은 타샤 리 수준에서 시퀀스
'ccs'시퀀스'cscs'보다 크게합니다.<reset> cs </ reset> <x> <t> ccs </ t> <extend> cs </ extend> </ x>
LDML 사양은 일반 확장 형식 구문을 "신중을 요하는 것"이라고 설명하고 있습니다. 자세한 내용은 사양을 참조하십시오.
이전 컨텍스트 구문은
<x>및<context>요소를 사용하여 문자 앞에 컨텍스트에 의해 정렬이 변경되도록 지정합니다. 다음 규칙은 보조 수준에서'-'를'a'보다 큰하지만 이것은'-'앞에'b'가있을 때뿐입니다.<reset> a </ reset> <x> <context> b </ context> <s> - </ s> </ x>
이전 컨텍스트 구문은
<extend>요소를 포함 할 수 있습니다. 다음 규칙은 기본 수준'def'를'aghi'보다 큰하지만 이것은'def'앞에'abc'가있을 때뿐입니다.<reset> a </ reset> <x> <context> abc </ context> <p> def </ p> <extend> ghi </ extend> </ x>
초기화 규칙은
before속성이 허용되어 있습니다. 일반적으로 재설정 규칙의 뒤의 이동 규칙은 다시 문자 뒤에 정렬하는 문자를 지정합니다.before속성을 지닌 재설정 규칙 후 이동 규칙은 다시 문자 앞에 정렬하는 문자를 지정합니다. 다음 규칙은 기본 수준에서 문자'b'를'a'의 직전에 배치합니다.<reset before = "primary"> a </ reset> <p> b </ p>
허용되는
before속성 값은 이름 또는 동등한 수치로 정렬 수준을 지정합니다.<reset before = "primary"> <reset before = "1"> <reset before = "secondary"> <reset before = "2"> <reset before = "tertiary"> <reset before = "3">
초기화 규칙은 리터럴 문자가 아니라 논리 리셋 위치에 이름을 넣을 수 있습니다.
<first_tertiary_ignorable /> <last_tertiary_ignorable /> <first_secondary_ignorable /> <last_secondary_ignorable /> <first_primary_ignorable /> <last_primary_ignorable /> <first_variable /> <last_variable /> <first_non_ignorable /> <last_non_ignorable /> <first_trailing /> <last_trailing />
다음 규칙은 기본 수준
'z'를 Default Unicode Collation Element Table (DUCET) 항목을 따라 CJK이 아닌 무시할 수없는 문자보다 크게합니다.<reset> <last_non_ignorable /> </ reset> <p> z </ p>
논리 위치는 다음 표에 나와있는 코드 포인트가 설정되어 있습니다.
표 10.3 논리 리셋 위치의 코드 포인트
논리 위치 Unicode 4.0.0 코드 포인트 Unicode 5.2.0 코드 포인트 <first_non_ignorable/>U + 02D0 U + 02D0 <last_non_ignorable/>U + A48C U + 1342E <first_primary_ignorable/>U + 0332 U + 0332 <last_primary_ignorable/>U + 20EA U + 101FD <first_secondary_ignorable/>U + 0000 U + 0000 <last_secondary_ignorable/>U + FE73 U + FE73 <first_tertiary_ignorable/>U + 0000 U + 0000 <last_tertiary_ignorable/>U + FE73 U + FE73 <first_trailing/>U + 0000 U + 0000 <last_trailing/>U + 0000 U + 0000 <first_variable/>U + 0009 U + 0009 <last_variable/>U + 2183 U + 1D371 <collation>요소는 변화 규칙의 문자 가중치 계산에 영향을shift-after-method속성을 허용합니다. 이 속성은 다음 값이 허용되어 있습니다.simple:before속성이없는 재설정 규칙에서 문자의 가중치를 계산합니다. 이 속성이 지정되지 않은 경우 기본값입니다.expand: 재설정 규칙 후의 변화에 확장 형식을 사용합니다.
'0'과'1'이0E29과0E2A의 무게를 가지며 모든 기본 라틴 문자를'0'에서'1'사이에 설정합니다.<reset> 0 </ reset> <pc> abcdefghijklmnopqrstuvwxyz </ pc>
단순한 쉬프트 모드의 경우 가중치는 다음과 같이 계산됩니다.
'a'has weight 0E29 +1 'b'has weight 0E29 +2 'c'has weight 0E29 +3 ...
그러나
'0'에서'1'사이에는 26 개의 문자를 설정하는 데 충분한 미사용 위치가 없습니다. 숫자와 문자가 혼합 된 결과입니다.이를 해결하려면
shift-after-method="expand"를 사용합니다. 이 경우 가중치는 다음과 같이 계산됩니다.'a'has weight [0E29] [233D + 1] 'b'has weight [0E29] [233D + 2] 'c'has weight [0E29] [233D + 3] ...
233D는 문자0xA48C의 UCA 4.0.0 무게입니다. 이것은 마지막 무시할 수없는 문자 (CJK를 제외하고 데이터 정렬 일종의 가장 큰 문자)입니다. UCA 5.2.0도 마찬가지이지만, 문자0x1342E에3ACA을 사용합니다.
MySQL 고유의 LDML 확장
MySQL 5.6에서는 LDML 규칙의 확장 기능은 <collation> 요소는 데이터 정렬을 기반으로 UCA 버전을 나타내는 version 옵션 속성을 <collation> 태그에 포함 할 수 있습니다. version 속성을 생략하면 기본값은 4.0.0 입니다. 예를 들어, 다음의 지정은 UCA 5.2.0에 따라 데이터 정렬을 나타냅니다.
<collation id = "nnn"name ="utf8_xxx_ci "version ="5.2.0 "> ... </ collation>