"enum"및 "set"의 MySQL 데이터 유형의 경우 하나를 사용하는 것의 차이점과 장단점은 무엇입니까?
데이터 유형의 예 :
- enum ( 'A', 'B', 'C')
- set ( 'A', 'B', 'C')
내가 아는 유일한 차이점은 ENUM은 하나의 값만 선택할 수있는 반면 SET는 여러 값을 선택할 수 있다는 것입니다.
"enum"및 "set"의 MySQL 데이터 유형의 경우 하나를 사용하는 것의 차이점과 장단점은 무엇입니까?
데이터 유형의 예 :
내가 아는 유일한 차이점은 ENUM은 하나의 값만 선택할 수있는 반면 SET는 여러 값을 선택할 수 있다는 것입니다.
답변:
현상태대로 MySQL의 문서 상태 :
ENUM 또는 SET 열의 정의는 열에 입력 된 값에 대한 제약으로 작용합니다. 다음 조건을 충족하지 않는 값에 대해 오류가 발생합니다.
ENUM 값은 열 정의에 나열된 값 중 하나이거나 이에 상응하는 내부 숫자 여야합니다. 값은 오류 값 (즉, 0 또는 빈 문자열)이 될 수 없습니다. ENUM ( 'a', 'b', 'c')로 정의 된 열의 경우 '', 'd'또는 'ax'와 같은 값은 잘못되어 거부됩니다.
SET 값은 빈 문자열이거나 쉼표로 구분 된 열 정의에 나열된 값으로 만 구성된 값이어야합니다. SET ( 'a', 'b', 'c')로 정의 된 열의 경우 'd'또는 'a, b, c, d'와 같은 값은 잘못되어 거부됩니다.
(a, b, c, d)
거부되지 않습니다. 그냥 d
거부되므로 값이 발생합니다 (a, b, c)
.
CREATE TABLE setTest(
attrib SET('bold','italic','underline')
);
INSERT INTO setTest (attrib) VALUES ('bold');
INSERT INTO setTest (attrib) VALUES ('bold,italic');
INSERT INTO setTest (attrib) VALUES ('bold,italic,underline');
위의 코드를 복사하여 mysql에 붙여 넣으면 SET이 실제로 컬렉션 이라는 것을 알 수 있습니다. 선언 한 속성의 각 조합을 저장할 수 있습니다.
CREATE TABLE enumTest(
color ENUM('red','green','blue')
);
INSERT INTO enumTest (color) VALUES ('red');
INSERT INTO enumTest (color) VALUES ('gray');
INSERT INTO enumTest (color) VALUES ('red,green');
위의 코드를 복사 할 수도 있습니다. 그리고 각 ENUM은 실제로 매번 한 번만 저장할 수 있습니다. 그리고 마지막 두 줄의 결과가 모두 비어 있음을 알 수 있습니다.
사실 매우 간단합니다.
ENUM ( 'Yes', 'No', 'Maybe') 를 정의 할 때 이러한 값 중 하나 (또는 해당 위치 인덱스 번호) 만 삽입 해야합니다.
당신이 정의 할 때 SET ( 'R', 'W'를, 'X'는) 당신은 할 수 빈 문자열을 삽입, 또는 하나 이상의 이러한 값. 미리 정의 된 집합에없는 것을 삽입하면 대신 빈 문자열이 삽입됩니다. 삽입하기 전에 모든 중복 값이 삭제되므로 허용되는 각 값의 인스턴스가 하나만 삽입됩니다.
이것이 해결되기를 바랍니다.
Winbobob의 대답은 정확하지 않으며 여러 값을 삽입 할 때 값이 쉼표로 구분 된 문자열이어야하므로 잘못된 예가 포함되어 있습니다. 그의 모든 삽입물은 실제로 단일 값만 삽입하고 있으며 마지막 두 개는 정의 된 집합에 없습니다.