• 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)
  • 11. 데이터형(Data Types)
  • 1. 데이터 형식 요약
    2. 수치형
    3. 날짜와 시간 형
    4. 문자열
    1. CHAR 및 VARCHAR 형
    2. BINARY 및 VARBINARY 형
    3. BLOB 형태와 TEXT 형태
    4. ENUM 형태
    5. SET형
    5. 공간 데이터의 확장
    6. 데이터 형 기본값
    7. 데이터 유형의 스토리지 요구 사항
    8. 컬럼에 적절한 형태의 선택
    9. 기타 데이터베이스 엔진의 데이터 형식 사용
  • 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 새로운 기능

11.4.5 SET 형

SET 는 0 개 이상의 값을 취할 수있는 문자열 개체이며, 각각의 값은 테이블을 만들 때 지정된 허용되는 값 목록에서 선택해야합니다. SET 컬럼 값이 여러 세트 멤버로 구성된 경우 각 구성원은 쉼표 ( " , ")로 구분됩니다. 따라서 SET 멤버의 값 자체에 쉼표를 포함하지 마십시오.

예를 들어, SET('one', 'two') NOT NULL 로 지정된 컬럼은 다음 값 중 하나를 취합니다.

 ''
 'one'
 'two'
 'one, two'

SET 컬럼은 최대 64 개의 개별 구성원을 포함 할 수 있습니다. 테이블에는 그룹으로 간주되는 ENUM 및 SET 컬럼 안의 고유 요소 목록 정의를 255 개 이하를 포함 할 수 있습니다. 이 제한 자세한 내용은 섹션 D.10.5 ".frm 파일 구조에 의해 부과되는 제한" 을 참조하십시오.

정의에 중복 된 값이 포함되어 있으면 경고 (엄격한 SQL 모드가 활성화되어 있으면 오류)가 발생합니다.

테이블이 작성 될 때 테이블 정의에서 SET 멤버 값에서 후행 공백이 자동으로 삭제됩니다.

SET 컬럼에 저장된 값은 취득 할 때, 컬럼 정의에서 사용 된 대 / 소문자로 표시됩니다. SET 컬럼에는 문자 셋과 콜레 션을 할당 할 수 있습니다. 이진 데이터 정렬 또는 대소 문자 구분 데이터 정렬의 경우, 컬럼에 값을 할당 할 때 대 / 소문자가 고려됩니다.

MySQL은 첫 세트 멤버에 해당하는 저장 값의 하위 비트를 사용하여 SET 값을 숫자로 저장합니다. SET 값을 숫자 컨텍스트에서 취득한 경우 그 취득 된 값은 컬럼 값을 구성하는 세트 멤버에 해당하는 비트 세트가 포함되어 있습니다. 예를 들어, 다음과 같이 SET 컬럼에서 숫자를 얻을 수 있습니다.

 mysql> SELECT set_col +0 FROM tbl_name ;

멤버가 SET 컬럼에 저장되면 그 숫자의 이진 표현에 설정되어있는 비트에서 컬럼 값의 세트 멤버가 특정됩니다. 컬럼이 SET('a','b','c','d') 로 지정되어있는 경우, 세트 멤버는 다음 10 진수와 2 진수 값을가집니다.

SET MemberDecimal ValueBinary Value
'a'10001
'b'20010
'c'40100
'd'81000

이 컬럼에 9 의 값을 할당하면 2 진수 1001 하므로 SET 값의 첫 번째와 네 번째 멤버 인 'a' 와 'd' 가 선택되고 결과 값은 'a,d' 입니다.

하나 이상의 SET 요소를 포함한 값은 값을 삽입 할 때 요소가 어떤 순서로 나열되어 있는지는 중요하지 않습니다. 또한 소정의 요소 값에서 여러 번 나열되어 있는지도 중요하지 않습니다. 나중에 값을 얻을 때 값의 각 요소는 테이블 생성시에 지정된 순서에 따라 한 번 표시됩니다. 예를 들어, 컬럼이 SET('a','b','c','d') 로 지정되어 있다고합니다.

 mysql> CREATE TABLE myset (col SET('a', 'b', 'c', 'd'));

'a,d' , 'd,a' , 'a,d,d' , 'a,d,a' 및 'd,a,d' 의 값을 삽입 한 경우

 mysql> INSERT INTO myset (col) VALUES
 -> ( 'a, d') ( 'd, a') ( 'a, d, a') ( 'a, d, d') ( 'd, a, d');
 Query OK, 5 rows affected (0.01 sec)
 Records : 5 Duplicates : 0 Warnings : 0

이러한 값은 모두 취득 할 때 'a,d' 로 표시됩니다.

mysql> SELECT col FROM myset;
+------+
| col  |
+------+
| a,d  |
| a,d  |
| a,d  |
| a,d  |
| a,d  |
+------+
5 rows in set (0.04 sec)

지원되지 않는 값으로 SET 컬럼을 설정하면 그 값은 무시되고 경고가 표시됩니다.

mysql> INSERT INTO myset (col) VALUES ('a,d,d,s');
Query OK, 1 row affected, 1 warning (0.03 sec)

mysql> SHOW WARNINGS;
+---------+------+------------------------------------------+
| Level   | Code | Message                                  |
+---------+------+------------------------------------------+
| Warning | 1265 | Data truncated for column 'col' at row 1 |
+---------+------+------------------------------------------+
1 row in set (0.04 sec)

mysql> SELECT col FROM myset;
+------+
| col  |
+------+
| a,d  |
| a,d  |
| a,d  |
| a,d  |
| a,d  |
| a,d  |
+------+
6 rows in set (0.01 sec)

엄격한 SQL 모드가 활성화되면 잘못된 SET 값을 삽입하려고하면 오류가 발생합니다.

SET 값은 수치로 정렬됩니다. NULL 값은 비 NULL SET 값 앞에 정렬됩니다.

수치 인수를 SUM() 과 AVG() 등의 함수는 필요에 따라 인수를 숫자로 변환합니다. SET 값의 경우 캐스팅 작업에 따라서 수치가 사용됩니다.

일반적으로 FIND_IN_SET() 함수 또는 LIKE 연산자를 사용하여 SET 값을 검색합니다.

 mysql> SELECT * FROM tbl_name WHERE FIND_IN_SET(' value ', set_col )>0;
 mysql> SELECT * FROM tbl_name WHERE set_col LIKE '% value %';

첫 번째 문은 set_col 이 value 세트 구성원을 포함하는 행을 찾습니다. 두 번째도 비슷하지만 같지는 않습니다. 다른 세트 멤버의 부분 문자열로하더라도, set_col 이 value 를 포함하는 행을 찾습니다.

다음 문을 사용할 수 있습니다.

 mysql> SELECT * FROM tbl_name WHERE set_col & 1;
 mysql> SELECT * FROM tbl_name WHERE set_col = ' val1 , val2 ';

이들 중 첫 번째 문은 첫 세트 멤버를 포함한 값을 찾습니다. 두 번째 문은 정확히 일치하는 값을 찾습니다. 두 번째 형태는 신중하게 비교하십시오. 세트 값을 ' val1 , val2 ' 과 비교하면 값을 ' val2 , val1 ' 와 비교했을 때와는 다른 결과가 반환됩니다. 컬럼 정의에 나열된 순서대로 값을 지정해야합니다.

SET 컬럼의 가능한 값을 모두 확인하려면 SHOW COLUMNS FROM tbl_name LIKE set_col 를 사용하여 출력 Type 컬럼의 SET 정의를 구문 분석합니다.

C API에서는 SET 값은 문자열로 반환됩니다. 결과 세트의 메타 데이터를 사용하여 이들을 다른 문자열에서 구분하는 방법은 섹션 23.8.5 "C API 데이터 구조" 를 참조하십시오.

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