Loading...
MySQL 9.5 Reference Manual 9.5의 11.2.4 Mapping of Identifiers to File Names의 한국어 번역본입니다.
아래의 경우에 피드백에서 신고해주신다면 반영하겠습니다.
감사합니다 :)
데이터베이스 및 테이블 식별자와 파일 시스템의 이름 사이에는 대응 관계가 있습니다. 기본 구조에서 MySQL은 각 데이터베이스를 데이터 디렉터리 내의 하나의 디렉터리로 표현하고, 스토리지 엔진에 따라 각 테이블을 해당 데이터베이스 디렉터리 안의 하나 이상의 파일로 표현할 수 있습니다.
데이터 및 인덱스 파일의 경우, 디스크 상에서의 정확한 표현은
스토리지 엔진에 따라 다릅니다. 이들 파일은 데이터베이스 디렉터리에
저장되거나, 정보가 별도의 파일에 저장될 수 있습니다.
InnoDB 데이터는 InnoDB 데이터 파일에 저장됩니다.
InnoDB에서 테이블스페이스를 사용한다면, 사용자가 생성한
특정 테이블스페이스 파일이 대신 사용됩니다.
ASCII NUL (X'00')을 제외한 모든 문자는
데이터베이스 또는 테이블 식별자에서 사용할 수 있습니다.
MySQL은 데이터베이스 디렉터리나 테이블 파일을 생성할 때,
해당 파일 시스템에서 문제가 되는 문자를 대응하는 파일 시스템
객체에 인코딩합니다:
Basic Latin letters (a..zA..Z), 숫자
(0..9) 및 underscore (_)는
있는 그대로 인코딩됩니다. 따라서 이들의 대소문자 구분 여부는
파일 시스템의 기능에 직접적으로 의존합니다.
대소문자 매핑이 있는 알파벳의 기타 모든 national letter는 다음 표와 같이 인코딩됩니다. Code Range 열의 값은 UCS-2 값입니다.
| Code Range | Pattern | Number | Used | Unused | Blocks |
|---|---|---|---|---|---|
| 00C0..017F | [@][0..4][g..z] | 5*20= 100 | 97 | 3 | Latin-1 Supplement + Latin Extended-A |
| 0370..03FF | [@][5..9][g..z] | 5*20= 100 | 88 | 12 | Greek and Coptic |
| 0400..052F | [@][g..z][0..6] | 20*7= 140 | 137 | 3 | Cyrillic + Cyrillic Supplement |
| 0530..058F | [@][g..z][7..8] | 20*2= 40 | 38 | 2 | Armenian |
| 2160..217F | [@][g..z][9] | 20*1= 20 | 16 | 4 | Number Forms |
| 0180..02AF | [@][g..z][a..k] | 20*11=220 | 203 | 17 | Latin Extended-B + IPA Extensions |
| 1E00..1EFF | [@][g..z][l..r] | 20*7= 140 | 136 | 4 | Latin Extended Additional |
| 1F00..1FFF | [@][g..z][s..z] | 20*8= 160 | 144 | 16 | Greek Extended |
| .... .... | [@][a..f][g..z] | 6*20= 120 | 0 | 120 | RESERVED |
| 24B6..24E9 | [@][@][a..z] | 26 | 26 | 0 | Enclosed Alphanumerics |
| FF21..FF5A | [@][a..z][@] | 26 | 26 | 0 | Halfwidth and Fullwidth forms |
| Code Range | Pattern | Number | Used | Unused | Blocks |
|---|
이 시퀀스의 바이트 중 하나가 lettercase를 인코딩합니다.
예를 들어, LATIN CAPITAL LETTER A WITH GRAVE는 @0G로 인코딩되는 반면,
LATIN SMALL LETTER A WITH GRAVE는
@0g로 인코딩됩니다. 여기에서 세 번째 바이트
(G 또는 g)가 lettercase를 나타냅니다.
(대소문자를 구별하지 않는 파일 시스템에서는 두 글자가
동일하게 취급됩니다.)
일부 block(예: Cyrillic)에서는 두 번째 바이트가 lettercase를 결정합니다. 다른 block(예: Latin1 Supplement)에서는 세 번째 바이트가 lettercase를 결정합니다. Greek Extended와 같이 시퀀스의 두 바이트가 letter인 경우, 가장 왼쪽의 letter 문자가 lettercase를 나타냅니다. 그 밖의 모든 letter 바이트는 소문자여야 합니다.
_)를 제외한 모든 nonletter 문자와,
대소문자 매핑이 없는 알파벳(예: Hebrew)의 letter는
16진수 표현을 사용하여 인코딩되며, 이때 16진수 digit
a..f에는 소문자가 사용됩니다:10x003F -> @003f 20xFFFF -> @ffff
16진수 값은 ucs2 더블바이트 문자 집합에서의
문자 값에 해당합니다.
Windows에서는 nul, prn, aux와 같은
일부 이름에 대해, 서버가 해당 파일이나 디렉터리를 생성할 때
이름 뒤에 @@@를 추가하여 인코딩합니다. 이는
대응하는 데이터베이스 객체의 플랫폼 간 이식성을 위해 모든
플랫폼에서 발생합니다.
다음 이름들은 예약되어 있으며, 스키마 또는 테이블 이름으로
사용될 경우 @@@가 뒤에 추가됩니다:
CON
PRN
AUX
NUL
COM1 ~ COM9
LPT1 ~ LPT9
CLOCK$도 이 예약 이름 그룹에 속하지만,
@@@가 아니라 @0024가 뒤에 추가됩니다.
즉, CLOCK$가 스키마 또는 테이블 이름으로 사용되면,
파일 시스템에는 CLOCK@0024로 기록됩니다.
스키마 또는 테이블 이름에서 $ (dollar sign)을 사용하는
어떠한 경우에도 동일하게, 파일 시스템에서는
@0024로 치환됩니다.
참고
이러한 이름들은 INNODB_TABLES에는
추가된 형태로 기록되지만, TABLES에는
사용자가 입력한 그대로, 추가되지 않은 형태로 기록됩니다.
11.2.3 Identifier Case Sensitivity
11.2.5 Function Name Parsing and Resolution