[mysql] MySQL 열거 형 대 집합

“enum”및 “set”의 MySQL 데이터 유형의 경우 하나를 사용하는 것의 차이점과 장단점은 무엇입니까?

데이터 유형의 예 :

  • enum ( ‘A’, ‘B’, ‘C’)
  • set ( ‘A’, ‘B’, ‘C’)

내가 아는 유일한 차이점은 ENUM은 하나의 값만 선택할 수있는 반면 SET는 여러 값을 선택할 수 있다는 것입니다.



답변

현상태대로 MySQL의 문서 상태 :

ENUM 또는 SET 열의 정의는 열에 입력 된 값에 대한 제약으로 작용합니다. 다음 조건을 충족하지 않는 값에 대해 오류가 발생합니다.

ENUM 값은 열 정의에 나열된 값 중 하나이거나 이에 상응하는 내부 숫자 여야합니다. 값은 오류 값 (즉, 0 또는 빈 문자열)이 될 수 없습니다. ENUM ( ‘a’, ‘b’, ‘c’)로 정의 된 열의 경우 ”, ‘d’또는 ‘ax’와 같은 값은 잘못되어 거부됩니다.

SET 값은 빈 문자열이거나 쉼표로 구분 된 열 정의에 나열된 값으로 만 구성된 값이어야합니다. SET ( ‘a’, ‘b’, ‘c’)로 정의 된 열의 경우 ‘d’또는 ‘a, b, c, d’와 같은 값은 잘못되어 거부됩니다.


답변

비유 :
ENUM = 라디오 필드 (승인 된 값만 나열된 항목, 하나만 선택할 수 있음)
SET = 확인란 필드 (승인 된 값만 나열된 항목, 여러 개를 선택할 수 있음)


답변

Enum 및 Set는 한 번에 하나만 선택할 수있는 라디오 버튼 목록이있는 경우 Enum을 사용하는 것과 같이 요구 사항에 전적으로 의존합니다. 한 번에 하나 이상의 항목을 선택할 수있는 확인란 목록이있는 경우 set를 사용합니다.


답변

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의 대답은 정확하지 않으며 여러 값을 삽입 할 때 값이 쉼표로 구분 된 문자열이어야하므로 잘못된 예가 포함되어 있습니다. 그의 모든 삽입물은 실제로 단일 값만 삽입하고 있으며 마지막 두 개는 정의 된 집합에 없습니다.


답변