• MySQL매뉴얼
    • MySQL 5.6 매뉴얼
    • MySQL 5.1 매뉴얼
    • MySQL 5.0 매뉴얼
    • MySQL HA 매뉴얼
  • 기술문서
    • Xtrabackup 구성
    • 메모리 사용량 모니터링
  • 서비스
    • MySQL유지보수
    • MySQL라이선스
  • 온라인문의
  • 회사소개
  • → 목 록 (MySQL5.1 한글메뉴얼) [close]
  • 1. MySQL 5.1 Reference Manual
  • 2. Installing and MySQL 업그레이드하기
  • 3. 사용 설명서 (Tutorial)
  • 4. MySQL 프로그램 사용하기
  • 5. 데이터베이스 관리
  • 6. 리플리케이션
  • 7. 최적화 (Optimization)
  • 8. 클라이언트 및 유틸리티 프로그램
  • 9. 언어 구조 (Language Structure)
  • 10. 문자 셋 지원
  • 1. 일반적인 의미의 문자 셋과 콜레션
    2. MySQL의 문자 셋과 콜레션
    3. 문자 셋과 콜레션 지정하기
    4. 문자 셋과 콜레션 연결하기
    5. 콜레션 이슈
    6. 문자 셋 지원으로 영향을 받는 연산
    7. 유니코드 지원
    8. 메타데이터용 UTF-8
    9. 컬럼 문자 셋 변환
    10. MySQL이 지원하는 문자 셋과 콜레션
  • 24. API 및 라이브러리
  • 25. Connectors

10.8. 메타데이터용 UTF-8

 

메타 데이터란 “데이터에 대한 데이터”를 의미한다. 데이터 베이스를 설명하는 모든 것 - 데이터 베이스의 컨텐츠에 해당하는 것과는 반대로 - 이 메타 데이터가 된다. 따라서, 컬럼 이름, 데이터 베이스 이름, 사용자 이름, 그리고 SHOW의 결과로 나오는 대부분의 스트링은 메타 데이터이다.

 

INFORMATION_SCHEMA 테이블 컨텐츠에 대해서도 적용 되는데, 그 이유는 이렇게 정의된 테이블이 데이터 베이스 오브젝트에 대한 정보를 가지기 때문이다.

 

메타 데이터에 대한 표현은 반드시 아래의 요구 사항을 충족해야 한다:

  • 모든 메타 데이터는 동일한 문자 셋을 가져야 한다. 그렇지 않을 경우, INFORMATION_SCHEMA 안에 있는 테이블에 대한 SHOW 명령어 또는 SELECT 명령문은 둘 다 올바르게 동작을 하지 않는데, 그 이유는 이러한 명령문을 처리하면 한 컬럼에 있는 각각의 열이 서로 다른 문자 셋을 가지기 때문이다.
  • 메타 데이터는 반드시 모든 언어에 있는 모든 단어를 포함해야 한다. 그렇지 않으면, 사용자는 자신의 언어를 사용해서 컬럼 및 테이블의 이름을 지정할 수 없게 된다.

위의 두 가지 요구 사항을 만족시키기 위해서, MySQL은 메타 데이터를 UTF-8이라는 이름의 유니 코드 문자 셋에 저장한다. 여러분이 액센트 또는 라틴 문자가 아닌 문자를 결코 사용하지 않는다면 아무런 문제를 일으키지 않는다.

 

메타 데이터 요구 사항이 의미하는 것은 USER(), CURRENT_USER(), SESSION_USER(), SYSTEM_USER(), DATABASE(), 그리고 VERSION() 함수의 리턴 값이 디폴트로 UTF-8 문자를 갖는다는 것을 나타내는것이다.

 

서버는 character_set_system 시스템 변수를 메타 데이터 문자 셋 이름으로 설정한다:

 

mysql> SHOW VARIABLES LIKE 'character_set_system';

+----------------------+-------+

| Variable_name        | Value |

+----------------------+-------+

| character_set_system | utf8  |

+----------------------+-------+

 

유니 코드를 사용하는 메타 데이터 스토리지는 서버가 character_set_system 문자 셋에 있는 DESCRIBE 함수 결과 값과 컬럼 헤더를 디폴트로 리턴한다는 것을 의미하는 것은 아니다. 여러분이 SELECT column1 FROM t를 사용하게 되면, column1 이름 자체는 character_set_results 시스템 변수 값에 의해 결정되는 문자 셋 클라이언트에 리턴 되는데, 이것은 디폴트로 latin1를 갖고 있다. 만일 서버로 하여금 메타 데이터 결과를 다른 문자 셋으로 다시 돌려 주도록 하고자 한다면, SET NAMES 명령문을 사용해서 서버가 문자 셋 변환을 강제로 진행하도록 한다. SET NAMES는 character_set_results 및 기타 연관 시스템 변수를 설정한다. 다른 방법으로는, 서버에서 결과를 받은 후에 변환 작업을 하는 클라이언트 프로그램도 있다. 클라이언트가 변환 작업을 하는 것이 보다 효과적이기는 하지만, 이 옵션이 모든 클라이언트에 적용되는 것은 아니다.

 

만일 character_set_results가 NULL로 설정되어 있다면, 아무런 변환도 실행되지 않으며 서버는 자신의 원래 문자 셋을 사용해서 메타 데이터를 리턴한다 (character_set_system이 지정하는 문자 셋).

 

서버에서 클라이언트로 전달되는 에러 메시지는 메타 데이터와 함께 자동으로 클라이언트 문자 셋으로 변환된다.

 

비교 연산 또는 단일 명령문 안에서 할당을 하기 위해서 USER() 함수를 사용한다면, 걱정을 하지 않아도 된다. MySQL은 이러한 것들을 자동으로 진행한다.

 

SELECT * FROM Table1 WHERE USER() = latin1_column;

 

이것은 제대로 동작을 하는데, 그 이유는 latin1_column 컨텐츠가 비교 연산이 실행되기 전에 자동으로 UTF-8로 변환되기 때문이다.

 

INSERT INTO Table1 (latin1_column) SELECT USER();

 

이것은 제대로 동작을 하는데, 그 이유는 USER() 컨텐츠가 할당이 이루어지지 전에 자동으로 latin1 로 변환되기 때문이다. 아직까지는 자동 변환이 완벽하게 구현되지는 않았지만, 다음 버전에서는 정확히 구현될 예정이다.

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