• 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. 데이터 정렬 문제
    1. 데이터 정렬 이름
    2. SQL문에서 COLLATE 사용
    3. COLLATE 절 우선 순위
    4. 데이터 정렬과 문자 집합의 적절한 대응
    5. 식의 데이터 정렬
    6. _bin 및 binary 데이터 정렬
    7. BINARY 연산자
    8. 데이터 정렬의 효과의 예
    9. 데이터 정렬과 INFORMATION_SCHEMA 검색
    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.7.5 식의 데이터 정렬

대다수의 문은 MySQL이 어떤 데이터 정렬을 사용하여 비교 연산을 할지는 명확되어 있습니다. 예를 들어, 다음의 경우에는 정렬 순서가 컬럼 charset_name 데이터 정렬 인 것은 분명하다.

 SELECT x FROM T ORDER BY x;
 SELECT x FROM T WHERE x = x;
 SELECT DISTINCT x FROM T;

그러나 여러 피연산자가 있으면, 애매함이 발생할 수 있습니다. 예 :

 SELECT x FROM T WHERE x = 'Y';

컬럼 x 의 데이터 정렬을 사용하여 비교하는 것이 좋을까요, 아니면 문자열 리터럴 'Y' 의 조합 순서를 사용하여 비교하는 편이 낫다 있을까요? x 와 'Y' 모두 데이터 정렬이 있습니다 만, 어느 데이터 정렬이 우선되는 것입니까?

표준 SQL에서는 "강제성"규칙이라고했던 방법으로 위의 문제를 해결하고 있습니다. MySQL은 다음과 같이 강제성 값을 할당합니다.

  • 명시적인 COLLATE 절 강제성은 0입니다. (강제성이 전혀 없습니다.)

  • 데이터 정렬이 다른 2 개의 문자열을 연결하면 강제성은 1입니다.

  • 열 또는 스토어드 루틴 파라미터 또는 로컬 변수의 데이터 정렬 강제성은 2입니다.

  • "시스템 상수 '( USER() 또는 VERSION() 등의 함수에서 반환되는 문자열)의 강제성은 3입니다.

  • 리터럴 데이터 정렬의 강제성은 4입니다.

  • NULL 또는 NULL 에서 파생 된 식의 강제성 5입니다.

MySQL은 다음의 규칙과 함께 강제성 값을 사용하여 모호성을 해결합니다.

  • 강제성 값이 가장 낮은 데이터 정렬을 사용합니다.

  • 양쪽에서 강제성이​​ 같은 경우는 다음과 같습니다.

    • 두 측 Unicode인지 두 측 Unicode가 아닌 경우 오류가 발생합니다.

    • 양쪽에 Unicode 캐릭터 세트가 있고 다른 한쪽에 Unicode 이외의 문자 세트가있는 경우, Unicode 캐릭터 세트의 측면이 우선되어 Unicode 이외의 측면에 자동 문자 집합 변환이 적용됩니다. 예를 들어, 다음 명령문은 오류를 반환하지 않습니다.

       SELECT CONCAT (utf8_column, latin1_column) FROM t1;
      

      이것은 utf8 문자 세트와 utf8_column 와 같은 데이터 정렬을 포함하는 결과를 반환합니다. 연결하기 전에 latin1_column 값은 자동으로 utf8 로 변환됩니다.

    • 동일한 문자 집합 피연산자이지만 _bin 데이터 정렬과 _ci 또는 _cs 혼합 데이터 정렬 피연산자를 사용한 연산의 경우 _bin 데이터 정렬이 사용됩니다. 이것은 대상이 데이터 타입이 아닌 데이터 정렬 인 점을 제외하면 비 이진 문자열 및 이진 문자열이 혼합 된 연산 피연산자가 바이너리 문자열로 평가되는 방법과 비슷합니다.

자동 변환 기능은 SQL 표준에는 포함되어 있지 않습니다. 그러나 어떤 문자 세트도 (지원되는 문자에 대해) Unicode의 "일부"임을 SQL 표준 문서에 기재되어 있습니다. "슈퍼 세트에 적용되는 것은 일부에도 적용된다"라고 잘 알려진 원칙이 있기 때문에 Unicode 데이터 정렬은 Unicode 이외의 문자열과 비교도 적용 할 수 있다고 생각합니다.

예 :

비교 사용되는 데이터 정렬
column1 = 'A' column1 의 데이터 정렬을 사용합니다
column1 = 'A' COLLATE x 'A' COLLATE x 데이터 정렬을 사용합니다
column1 COLLATE x = 'A' COLLATE y 오류

COERCIBILITY() 함수를 사용하면 문자열 식의 강제성을 확인할 수 있습니다.

 mysql> SELECT COERCIBILITY('A' COLLATE latin1_swedish_ci);
         -> 0
 mysql> SELECT COERCIBILITY(VERSION());
         -> 3
 mysql> SELECT COERCIBILITY('A');
         -> 4

섹션 12.14 "정보 함수" 를 참조하십시오.

식 CONCAT(1, 'abc') 에서 인수 1 에 대해 수행되는 변환 등 숫자 또는 시간 값의 문자열로 암시 적 변환의 경우, 그 결과는 character_set_connection 및 collation_connection 시스템 변수로 지정된 문자 세트 및 데이터 정렬을 가진 문자 (비 바이너리) 열 수 있습니다. 섹션 12.2 "수식 계산에서의 타입 변환" 을 참조하십시오.

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