• MySQL매뉴얼
    • MySQL 5.6 매뉴얼
    • MySQL 5.1 매뉴얼
    • MySQL 5.0 매뉴얼
    • MySQL HA 매뉴얼
  • 기술문서
    • Xtrabackup 구성
    • 메모리 사용량 모니터링
  • 라이선스
  • 온라인문의
  • 회사소개
  • → 목 록 (MySQL5.6 한글메뉴얼) [close]
  • 1. MySQL 5.6 새로운 기능
  • 2. MySQL 설치 및 업그레이드
  • 3. MySQL Tutorial
  • 4. MySQL 프로그램
  • 5. MySQL 서버관리
  • 6. 보안
  • 7. 백업 및 복구
  • 8. 최적화
  • 9. Language Structure(언어구조)
  • 1. 리터럴 값
    2. 스키마 개체 이름
    1. 식별자의 수식
    2. 식별자의 대문자와 소문자의 구별
    3. 식별자와 파일 이름 매핑
    4. 함수 이름 구문 분석 및 해결
    3. 예약어
    4. 사용자 정의 변수
    5. 식의 구문
    6. 댓글 구문
  • 10. Character Sets(Globalization)
  • 11. 데이터형(Data Types)
  • 12. 함수와 연산자
  • 13. SQL 문법
  • 14. InnoDB 스토리지 엔진
  • 15. 기타 스토리지 엔진
  • 16. 고가용성 및 확장성
  • 17. 리플리케이션
  • 18. MySQL Cluster
  • 19. 파티셔닝
  • 20. Stored Programs and Views
  • 21. INFORMATION_SCHEMA
  • 22. PERFORMANCE SCHEMA
  • 23. 컨넥터 및 API
  • 24. MySQL 확장
  • 25. MySQL Enterprise Edition
  • 26. MySQL Workbench
  • 27. 제약 및 제한
  • 28. MySQL 5.7 새로운 기능

9.2.3 식별자와 파일 이름 매핑

데이터베이스 식별자와 테이블 식별자와 파일 시스템의 이름 사이에는 대응이 있습니다. 기본 구조는 MySQL은 각 데이터베이스를 데이터 디렉토리 내의 디렉토리로 표현하고 각 테이블을 적절한 데이터베이스 디렉토리에있는 하나 이상의 파일로 표현합니다. 테이블 형식의 파일 ( .FRM )의 경우 데이터는 항상이 구조와 위치에 저장됩니다.

데이터 파일과 인덱스 파일의 경우 디스크의 정확한 표현은 스토리지 엔진에 따라 다릅니다. 이 파일을 FRM 파일과 같은 위치에 저장하거나 정보를 다른 파일에 저장할 수 있습니다. InnoDB 데이터는 InnoDB 데이터 파일에 저장됩니다. InnoDB 테이블 스페이스를 사용하는 경우에는 새로 생성 한 특정 테이블 스페이스 파일이 대신 사용됩니다.

데이터베이스 식별자 또는 테이블 식별자는 ASCII NUL ( 0x00 )를 제외한 모든 문자가 정당입니다. MySQL은 데이터베이스 디렉토리와 테이블 파일을 만들 때 해당 파일 시스템 객체에 문제가있는 모든 문자를 인코딩합니다.

  • 기본적인 라틴 문자 ( a..zA..Z ), 숫자 ( 0..9 ) 및 밑줄 ( _ )은 그대로 인코딩됩니다. 따라서 그들이 대소 문자를 구별 여부는 파일 시스템의 특성에 직접적으로 의존합니다.

  • 대소 문자 매핑을 가지는 알파벳 기원의 다른 나라의 문자는 다음 표와 같이 인코딩됩니다. 코드 범위 컬럼 값은 UCS-2입니다.

    코드 범위 패턴 번호 사용 미사용 블록
    00C0..017F [@] [0..4] [g..z] 5 * 20 = 100 97 3 보충 라틴어 -1 + 확장 라틴어 -A
    0370..03FF [@] [5..9] [g..z] 5 * 20 = 100 88 12 그리스어와 콥트어
    0400..052F [@] [g..z] [0..6] 20 * 7 = 140 137 3 키릴 문자 + 보충 키릴 문자
    0530..058F [@] [g..z] [7..8] 20 * 2 = 40 38 2 미국 영어
    2160..217F [@] [g..z] [9] 20 * 1 = 20 16 4 숫자 형식
    0180..02AF [@] [g..z] [a..k] 20 * 11 = 220 203 17 확장 라틴어 -B + 확장 IPA
    1E00..1EFF [@] [g..z] [l..r] 20 * 7 = 140 136 4 확장 라틴어 추가
    1F00..1FFF [@] [g..z] [s..z] 20 * 8 = 160 144 16 확장 그리스어
    .... .... [@] [a..f] [g..z] 6 * 20 = 120 0 120 RESERVED
    24B6..24E9 [@] [@] [a..z] 26 26 0 포위 문자
    FF21..FF5A [@] [a..z] [@] 26 26 0 전각과 반각

    시퀀스의 1 바이트가 대문자와 소문자의 구별을 인코딩합니다. 예 : LATIN CAPITAL LETTER A WITH GRAVE 은 @0G 로 인코딩되어 LATIN SMALL LETTER A WITH GRAVE 은 @0g 으로 인코딩됩니다. 여기에서는 3 번째 바이트 ( G 또는 g )가 대문자와 소문자의 구별을 나타냅니다. (대소 문자를 구별하지 않는 파일 시스템에서는 두 문자는 동일하게 취급됩니다.)

    언어 블록에는 키릴 문자와 같이 두 번째 바이트가 대문자와 소문자를 결정할 수도 있습니다. 보충 라틴어 1 등의 다른 언어 블록에서는 3 번째 바이트가 대문자와 소문자를 결정합니다. 시퀀스의 2 바이트 문자의 경우 (확장 그리스어 등), 제일 왼쪽의 글자를 대문자와 소문자의 구별을 나타냅니다. 다른 문자 바이트는 모두 소문자 여야합니다.

  • 밑줄 ( _ )를 제외한 모든 문자 이외의 문자는 대문자와 소문자의 매핑이없는 알파벳 기원 문자 (히브리어 등)과 함께 a..f 의 16 진수 값에 소문자를 사용하는 16 진수 표현을 사용 하여 인코딩됩니다.

     0x003F -> @ 003f
     0xFFFF -> @ffff
    

    16 진수는 ucs2 더블 바이트 문자 집합의 문자 값에 해당합니다.

Windows에서는 nul , prn , aux 등의 일부 이름은 서버가 해당 파일 또는 디렉터리를 만들 때 @@@ 이름에 추가하여 인코딩됩니다. 이것은 해당 데이터베이스 개체의 플랫폼간에 이식성을 위해 모든 플랫폼에서 이루어집니다.

MySQL 5.1.6 이전 버전의 데이터베이스와 테이블에서 특수 문자를 사용하고 그 하위 디렉토리 나 파일 이름이 그 특수 문자에 새로운 인코딩을 사용하도록 업데이트되지 않은 경우 서버는 INFORMATION_SCHEMA 테이블이나 SHOW 명령문의 출력에서 그 이름에 #mysql50# 라는 접두어를 붙여 표시합니다. 예를 들어, a@b 라는 테이블이 있고 그 이름 인코딩이 업데이트되지 않은 경우, SHOW TABLES 에 다음과 같이 표시됩니다.

mysql> SHOW TABLES;
+----------------+
| Tables_in_test |
+----------------+
| #mysql50#a@b   |
+----------------+

인코딩이 업데이트되지 않은이 같은 이름을 참조하려면 #mysql50# 접두어를 추가해야합니다.

mysql> SHOW COLUMNS FROM `a@b`;
ERROR 1146 (42S02): Table 'test.a@b' doesn't exist

mysql> SHOW COLUMNS FROM `#mysql50#a@b`;
+-------+---------+------+-----+---------+-------+
| Field | Type    | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| i     | int(11) | YES  |     | NULL    |       |
+-------+---------+------+-----+---------+-------+

특수 접두어를 사용할 필요를 없애 구명을 업데이트하려면 mysqlcheck로 다시 인코딩하십시오. 다음 명령은 모든 이름을 새로운 인코딩을 업데이트합니다.

 shell> mysqlcheck --check-upgrade --all-databases
 shell> mysqlcheck --fix-db-names --fix-table-names --all-databases

특정 데이터베이스 또는 테이블만을 확인하려면 --all-databases 를 제거하고 적절한 데이터베이스 및 테이블 인수를 추가한다. mysqlcheck 호출 구문은 섹션 4.5.3 "mysqlcheck - 테이블 관리 프로그램" 을 참조하십시오.

참고

#mysql50# 프리픽스는 서버가 내부적으로 사용하는 것 뿐이다. 이 접두어를 사용하는 이름으로 데이터베이스와 테이블을 작성하지 않도록하십시오.

또한 mysqlcheck는 특수 문자를 인코딩하는 데 사용하는 @ 문자 그대로 인스턴스가 포함 된 이름을 수정할 수 없습니다. 이 문자가 포함 된 데이터베이스와 테이블을 사용하는 경우, mysqldump에서 그들을 덤프 한 후 MySQL 5.1.6 이상으로 업그레이드 업그레이드 후 덤프 파일을 다시로드합니다.


서울시 강남구 영동대로 602 6층
TEL: 02-6061-0006  /  E: csr@mysqlkorea.com
주식회사 이노클러스터  등록번호 : 727-86-02261
Copyright © innocluster Co. ltd. all rights reserved