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
형식으로 쓸 수 있습니다. 그러나 nnnn
nnnn
는 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>