• 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.6 _bin 및 binary 데이터 정렬

이 섹션에서는 비 이진 문자열의 _bin 데이터 정렬이 이진 문자열 binary "데이터 정렬"과 어떻게 다른지에 대해 설명합니다.

비 이진 문자열 ( CHAR , VARCHAR 및 TEXT 데이터 유형에 포함)에는 문자 셋과 콜레 션이 있습니다. 특정 문자 집합에 여러 데이터 정렬을 지원하는 수 있으며, 그 각각이 세트의 문자의 구체적인 정렬 및 비교 순서를 정의하고 있습니다. 이들 중 하나가 문자 세트의 이진 데이터 정렬이며, 그 데이터 정렬 이름 중에는 _bin 접미사가 있습니다. 예를 들어, latin1 과 utf8 에는 latin1_bin 및 utf8_bin 라는 이진 데이터 정렬이 있습니다.

이진 문자열 ( BINARY , VARBINARY , 그리고 BLOB 데이터 유형에 포함)에는 비 이진 문자열에있는 것 같은 문자 세트 및 데이터 정렬은 없습니다. ( CHARSET() 와 COLLATION() 함수는 모두 이진 문자열에 적용되면 binary 값을 반환합니다.) 이진 문자열은 바이트의 시퀀스이며,이 바이트의 숫자 정렬 순서를 결정 합니다.

_bin 데이터 정렬은 몇 가지 점에서 binary 데이터 정렬과 다릅니다.

정렬 및 비교 단위. 이진 문자열은 바이트 순서입니다. 정렬 및 비교는 항상 숫자의 바이트 값에 따라 결정됩니다. 비 이진 문자열은 문자의 시퀀스이며, 이것은 멀티 바이트 일 수도 있습니다. 비 이진 문자열 데이터 정렬은 문자 값의 정렬 및 비교의 순서를 정의합니다. _bin 데이터 정렬의 경우,이 순서는 문자의 바이너리 코드 값에만 근거합니다 (이것은 _bin 데이터 정렬은 멀티 바이트 문자의 가능성을 고려할 필요가있는 점을 제외하면 이진 문자열의 순서에 비슷합니다). 다른 데이터 정렬의 경우, 문자의 순서는 대문자와 소문자의 구별 등의 기타 요소를 고려에 넣을 수 있습니다.

문자 집합 변환. 비 이진 문자열은 문자 세트가 많은 경우 문자열에 _bin 데이터 정렬이있는 경우에도 다른 문자 집합으로 변환됩니다.

  • 다른 문자 집합을 가진 다른 컬럼에서 컬럼 값을 할당하는 경우 :

     UPDATE t1 SET utf8_bin_column = latin1_column;
     INSERT INTO t1 (latin1_column) SELECT utf8_bin_column FROM t2;
    
  • 문자열 리터럴을 사용하여 INSERT 또는 UPDATE 의 컬럼 값을 할당하는 경우 :

     SET NAMES latin1;
     INSERT INTO t1 (utf8_bin_column) VALUES ( 'string-in-latin1');
    
  • 서버에서 클라이언트로 결과를 전송하는 경우 :

     SET NAMES latin1;
     SELECT utf8_bin_column FROM t2;
    

바이너리 문자열 컬럼의 경우 변환되지 않습니다. 위의 경우 문자열 값은 바이트처럼 복사됩니다.

대소 문자 변환. 데이터 정렬은 문자의 대소 문자에 대한 정보를 가지고 있기 때문에 비 이진 문자열의 문자는 대소 문자를 변환 할 수 있습니다. 이것은 순서로 대문자와 소문자의 구별을 무시 _bin 데이터 정렬의 경우에도 해당합니다.

mysql> SET NAMES latin1 COLLATE latin1_bin;
Query OK, 0 rows affected (0.02 sec)

mysql> SELECT LOWER('aA'), UPPER('zZ');
+-------------+-------------+
| LOWER('aA') | UPPER('zZ') |
+-------------+-------------+
| aa          | ZZ          |
+-------------+-------------+
1 row in set (0.13 sec)

대소 문자라는 개념은 이진 문자열의 바이트에는 적용되지 않습니다. 대소 문자 변환하려면 문자열을 비 이진 문자열로 변환해야합니다.

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

mysql> SELECT LOWER('aA'), LOWER(CONVERT('aA' USING latin1));
+-------------+-----------------------------------+
| LOWER('aA') | LOWER(CONVERT('aA' USING latin1)) |
+-------------+-----------------------------------+
| aA          | aa                                |
+-------------+-----------------------------------+
1 row in set (0.00 sec)

비교에서 후행 공백을 처리합니다. 비 이진 문자열은 _bin 데이터 정렬을 포함한 모든 데이터 정렬에 대한 PADSPACE 동작이 있습니다. 후행 공백은 비교 의미가 없습니다.

mysql> SET NAMES utf8 COLLATE utf8_bin;
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT 'a ' = 'a';
+------------+
| 'a ' = 'a' |
+------------+
|          1 |
+------------+
1 row in set (0.00 sec)

이진 문자열은 후행 공백을 포함한 모든 문자를 비교 중요합니다.

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

mysql> SELECT 'a ' = 'a';
+------------+
| 'a ' = 'a' |
+------------+
|          0 |
+------------+
1 row in set (0.00 sec)

삽입 및 제거에 후행 공백을 처리합니다. CHAR( N ) 열은 비 이진 문자열이 저장됩니다. N 문자보다 짧은 값은 삽입시 공백으로 확장됩니다. 제거의 경우 후행 공백은 삭제됩니다.

BINARY( N ) 열은 이진 문자열이 저장됩니다. N 바이트보다 짧은 값은 삽입시에 0x00 바이트로 확장됩니다. 제거의 경우 아무것도 삭제되지 않고 선언 된 길이 값이 항상 반환됩니다.

mysql> CREATE TABLE t1 (
    ->   a CHAR(10) CHARACTER SET utf8 COLLATE utf8_bin,
    ->   b BINARY(10)
    -> );
Query OK, 0 rows affected (0.09 sec)

mysql> INSERT INTO t1 VALUES ('a','a');
Query OK, 1 row affected (0.01 sec)

mysql> SELECT HEX(a), HEX(b) FROM t1;
+--------+----------------------+
| HEX(a) | HEX(b)               |
+--------+----------------------+
| 61     | 61000000000000000000 |
+--------+----------------------+
1 row in set (0.04 sec)


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