• 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(언어구조)
  • 10. Character Sets(Globalization)
  • 1. 문자 세트 지원
    1. 일반 문자 집합 및 데이터 정렬
    2. MySQL에서의 문자 셋과 콜레션
    3. 문자 셋과 콜레션 지정
    1. 서버 문자 집합 및 데이터 정렬
    2. 데이터베이스 문자 집합 및 데이터 정렬
    3. 테이블 문자 집합 및 데이터 정렬
    4. 컬럼 문자 집합 및 데이터 정렬
    5. 문자열 리터럴 문자 집합 및 데이터 정렬
    6. 각국 캐릭터 세트
    7. 문자 셋과 콜레션 할당의 예
    8. 다른 DBMS와의 호환성
    4. 연결 문자 집합 및 데이터 정렬
    5. 응용 프로그램의 문자 집합 및 정렬 순서 구성
    6. 오류 메시지의 문자 세트
    7. 데이터 정렬 문제
    8. 문자열의 레퍼토리
    9. 문자 세트 지원의 영향을받는 연산
    10. Unicode 지원
    11. 이전 Unicode 지원에서 현재 Unicode 지원으로 업그레이드
    12. 메타 데이터에 UTF-8
    13. 컬럼 문자 집합 변환
    14. MySQL에서 지원되는 문자셋과 콜레션
    2. 오류 메시지 언어 설정
    3. 문자 세트 추가
    4. 문자 세트에 데이터 정렬 추가
    5. 문자 세트 구성
    6. MySQL Server에서 시간대 지원
    7. MySQL Server의 로케일 지원
  • 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 새로운 기능

10.1.3.5 문자열 리터럴 문자 집합 및 데이터 정렬

각 문자열 리터럴은 문자 셋과 콜레 션이 있습니다.

문자열 리터럴은 옵션으로 문자 세트 인트로 듀서와 COLLATE 절을 지정할 수 있습니다.

 [_ charset_name ] ' string '[COLLATE collation_name ]

예 :

 SELECT ' string ';
 SELECT _latin1 ' string ';
 SELECT _latin1 ' string 'COLLATE latin1_danish_ci;

간단한 문장 SELECT ' string ' 에 대해 문자열에는 character_set_connection 및 collation_connection 시스템 변수에 정의 된 문자 셋과 콜레 션이 적용됩니다.

_ charset_name 수식은 공식적으로 인트로 듀서라고합니다. 이것은 "후속 문자열이 문자 집합 X 를 사용하는 "것을 퍼서에게 통지합니다. 알기 어렵 기 때문에 강조하고 있지만, 인트로 듀서는 CONVERT() 가 실시하는 인트로 듀서 문자 세트로 문자열의 변환하지 않습니다. 패딩이 이뤄질 가능성이 있지만 문자열 값은 변경하지 않습니다. 인트로 듀서는 단순한 신호입니다. 인트로 듀서는 표준 16 진수 리터럴 및 숫자의 16 진수 리터럴 표기법 ( x' literal ' 및 0x nnnn ) 앞에서도 비트 필드 리터럴 표기 ( b' literal ' 및 0b nnnn ) 앞에서도 유효합니다.

예 :

 SELECT _latin1 x'AABBCC ';
 SELECT _latin1 0xAABBCC;
 SELECT _latin1 b'1100011 ';
 SELECT _latin1 0b1100011;

MySQL은 리터럴 문자 집합 및 정렬 순서가 다음과 같이 결정됩니다.

  • _X 와 COLLATE Y 가 모두 지정된 경우 문자 집합 X 와 데이터 정렬 Y 가 사용됩니다.

  • _X 는 지정되어 있으나, COLLATE 가 지정되어 있지 않으면 문자 집합 X 와 기본 데이터 정렬이 사용됩니다. 각 문자 집합의 기본 데이터 정렬을 확인하려면 SHOW COLLATION 명령문을 사용합니다.

  • 그렇지 않은 경우는 character_set_connection 및 collation_connection 시스템 변수로 지정되는 문자 셋과 콜레 션이 사용됩니다.

예 :

  • 문자열에 latin1 문자 집합과 latin1_german1_ci 데이터 정렬이 지정되어있는 경우

     SELECT _latin1'Müller 'COLLATE latin1_german1_ci;
    
  • 문자열에 latin1 문자셋과 기본 데이터 정렬 (즉, latin1_swedish_ci )가 지정되어있는 경우

     SELECT _latin1'Müller ';
    
  • 문자열에 연결 기본 문자 집합 및 정렬 순서가 지정되어있는 경우

     SELECT 'Müller';
    

문자 세트 인트로 듀서와 COLLATE 절은 표준 SQL 사양에 따라 구현되어 있습니다.

인트로 듀서는 후속 문자열의 문자 세트를 지정하지만 현재 문자열에서 파서가 이스케이프 처리를 실행하는 방법까지 변경하지 않습니다. 이스케이프는 항상 character_set_connection 에서 지정된 문자 세트에 따라 파서가 해석합니다.

다음의 예는 인트로 듀서가 존재하는 경우에도 character_set_connection 를 사용하여 이스케이프 처리가 행해지는 것을 나타냅니다. 예를 들어, SET NAMES ( 섹션 10.1.4 "연결 문자 집합 및 정렬 순서" 에서 설명하고있는 바와 같이, character_set_connection 을 변경합니다)를 사용하여 정확한 문자열의 내용을 확인할 수 있도록 HEX() 함수를 사용하여 결과 문자열을 표시합니다.

예 1 :

mysql> SET NAMES latin1;
Query OK, 0 rows affected (0.01 sec)

mysql> SELECT HEX('à\n'), HEX(_sjis'à\n');
+------------+-----------------+
| HEX('à\n') | HEX(_sjis'à\n') |
+------------+-----------------+
| E00A       | E00A            |
+------------+-----------------+
1 row in set (0.00 sec)

여기에서는 " à "(16 진수 값 E0 ) 뒤에 줄 바꿈 이스케이프 시퀀스 인 ' \n '이 계속되고 있습니다. 이 이스케이프 시퀀스는 latin1 의 character_set_connection 값을 사용하여 해석 리터럴 개행 (16 진수 0A )을 생성합니다. 이것은 두 번째 문자열도 이루어집니다. 즉, _sjis 의 인트로 듀서는 파서의 이스케이프 처리에 영향을 미치지 않습니다.

예 2 :

mysql> SET NAMES sjis;
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT HEX('à\n'), HEX(_latin1'à\n');
+------------+-------------------+
| HEX('à\n') | HEX(_latin1'à\n') |
+------------+-------------------+
| E05C6E     | E05C6E            |
+------------+-------------------+
1 row in set (0.04 sec)

여기에서는 character_set_connection 는 sjis 입니다. 이 캐릭터 세트는 " à "뒤에" \ "(16 진수 값 05 및 5C )가 뒤를이었다 시퀀스는 유효한 멀티 바이트 문자입니다. 따라서 문자열의 처음 두 바이트는 단일 sjis 문자로 해석되어 " \ "는 이스케이프 문자로 해석되지 않습니다. 후속 " n "(16 진수 값 6E ) 이스케이프 시퀀스의 일부로 해석되지 않습니다. 이것은 두 번째 문자열에 적용됩니다. _latin1 의 인트로 듀서는 이스케이프 처리에 영향을 미치지 않습니다.

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