• 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. 문자 셋과 콜레션 지정
    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.8 문자열의 레퍼토리

문자 세트 레퍼토리는 그 세트의 문자 집합입니다.

문자열 식에는 레퍼토리 특성이 있고, 그 값은 다음 두 가지입니다.

  • ASCII : U+0000 부터 U+007F 의 Unicode 범위 내의 문자를 식에 포함 할 수 있습니다.

  • UNICODE : U+0000 부터 U+FFFF 의 Unicode 범위 내의 문자를 식에 포함 할 수 있습니다.

ASCII 범위는 UNICODE 범위의 부분 집합이기 때문에, ASCII 레퍼토리 문자열은 UNICODE 레퍼토리 문자열의 문자 세트 또는 ASCII 의 수퍼 세트 인 문자 집합에 정보를 잃지 않고 안전하게 변환 할 수 있습니다. (모든 MySQL 문자 세트는 스웨덴어로 악센트 부호가있는 문자 일부 구두점 문자를 다시 사용하는 swe7 를 제외하고는 ASCII 의 수퍼 세트입니다.) MySQL에서 "데이터 정렬 악성 혼합"오류가 반환된다 같은 많은 경우에도 레퍼토리를 사용하면 표현식의 문자 집합을 변환 할 수 있습니다.

다음의 설명에서 수식과 그 레퍼토리의 예를 들어 레퍼토리를 사용해서 문자열 식의 평가가 어떻게 달라지는지를 보여줍니다.

  • 문자열 상수의 레퍼토리는 문자열의 내용에 따라 다릅니다.

     SET NAMES utf8; SELECT 'abc';
     SELECT _utf8'def ';
     SELECT N'MySQL ';
    

    위의 각각의 경우에 문자 집합은 utf8 이지만, 실제로는 ASCII 범위 밖의 문자는 하나도 문자열에 포함되어 있지 않기 때문에, 그 레퍼토리는 UNICODE 가 아닌 ASCII 입니다.

  • ascii 문자 집합을 포함 컬럼은 문자 집합을 위해 ASCII 레퍼토리가 있습니다. 다음 테이블에서는 c1 에는 ASCII 레퍼토리가 있습니다.

     CREATE TABLE t1 (c1 CHAR (1) CHARACTER SET ascii);
    

    다음 예제에서는 레퍼토리가 없을 때 오류가 발생하는 경우 레퍼토리에 의해 어떻게 결과가 요구되게 될지를 보여줍니다.

     CREATE TABLE t1 (
       c1 CHAR (1) CHARACTER SET latin1,
       c2 CHAR (1) CHARACTER SET ascii
     );
     INSERT INTO t1 VALUES ( 'a', 'b');
     SELECT CONCAT (c1, c2) FROM t1;
    

    레퍼토리가없는 경우 다음과 같은 오류가 발생합니다.

     ERROR 1267 (HY000) : Illegal mix of collat​​ions (latin1_swedish_ci, IMPLICIT)
     and (ascii_general_ci, IMPLICIT) for operation 'concat'
    

    레퍼토리를 사용하면 일부에서 슈퍼 세트에 ( ascii 에서 latin1 로) 변환을 할 수 있고 결과가 반환됩니다.

    +---------------+
    | CONCAT(c1,c2) |
    +---------------+
    | ab            |
    +---------------+
    
  • 1 개의 문자열 인수를 가지는 함수는 인수의 레퍼토리를 상속합니다. UPPER(_utf8' abc ') 의 경우, 인수 ASCII 레퍼토리가 있기 때문에, 그 결과는 ASCII 레퍼토리가 존재합니다.

  • 문자열을 반환하는 문자열 인수를 가지지 않고, 결과 문자 세트로 character_set_connection 를 사용하는 함수의 경우, 결과의 레퍼토리는 character_set_connection 이 ascii 이면 ASCII 로, 그 이외의 경우는 UNICODE 입니다.

     FORMAT ( numeric_column 4);
    

    레퍼토리를 사용할지 여부에 따라 MySQL이 다음 예제를 어떻게 평가하는지가 달라집니다.

     SET NAMES ascii;
     CREATE TABLE t1 (a INT, b VARCHAR (10) CHARACTER SET latin1);
     INSERT INTO t1 VALUES (1, 'b');
     SELECT CONCAT (FORMAT (a, 4), b) FROM t1;
    

    레퍼토리가없는 경우 다음과 같은 오류가 발생합니다.

     ERROR 1267 (HY000) : Illegal mix of collat​​ions (ascii_general_ci, COERCIBLE)
     and (latin1_swedish_ci, IMPLICIT) for operation 'concat'
    

    레퍼토리를 사용하면 다음과 같은 결과가 반환됩니다.

    +-------------------------+
    | CONCAT(FORMAT(a, 4), b) |
    +-------------------------+
    | 1.0000b                 |
    +-------------------------+
    
  • 2 개 이상의 문자열 인수를 가지는 함수는 결과의 레퍼토리로 "가장 범위가 넓은 '인수 레퍼토리를 사용합니다 ( UNICODE 는 ASCII 보다 범위가 넓어집니다). 다음 CONCAT() 호출을 생각해 보겠습니다.

     CONCAT (_ucs2 0x0041, _ucs2 0x0042)
     CONCAT (_ucs2 0x0041, _ucs2 0x00C2)
    

    첫 번째 호출에서는 두 인수가 ascii 문자 집합의 범위 내에 있으므로 레퍼토리는 ASCII 입니다. 두 번째 호출에서는 2 번째의 인수가 ascii 문자 세트 범위를 벗어나 있기 때문에 레퍼토리는 UNICODE 입니다.

  • 함수의 반환 값의 레퍼토리는 결과의 문자 집합 및 정렬 순서에 영향을주는 인자의 레퍼토리에만 따라 정해져 있습니다.

     IF (column1 <column2 'smaller', 'greater')
    

    결과의 레퍼토리는 2 개의 문자열 인수 (두 번째 인수와 세번째 인자)가 모두 ASCII 레퍼토리이므로 ASCII 입니다. 첫 번째 인수는 식으로 문자열 값을 사용하는 경우에도 결과의 레퍼토리에 중요하지 않습니다.


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