Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL ENUM(열거형)에서 빈 값과 NULL 값 처리 방법 완벽 정리

MySQL에서 ENUM(열거형) 컬럼에 빈 값을 삽입할 수 있는지 여부는 SQL 모드 설정에 따라 달라집니다. SQL 모드가 TRADITIONAL, STRICT_TRANS_TABLES 또는 STRICT_ALL_TABLES로 설정되어 있지 않은 경우에만 빈 값이 허용됩니다. 반대로 이러한 엄격 모드가 활성화되어 있으면 MySQL은 빈 값을 거부하고 오류를 발생시킵니다.

참고로 각 ENUM 값에는 내부적으로 인덱스 값이 할당되는데, 빈 값('')의 인덱스 값은 0입니다.

빈 값 처리 예제

먼저 SQL 모드를 Traditional로 설정한 상태에서 빈 문자열을 삽입하면 오류가 발생합니다.

mysql> SET SQL_MODE ='Traditional';
Query OK, 0 rows affected (0.00 sec)

mysql> Insert into result(id, name, grade) values(100, 'Raman', '');
ERROR 1265 (01000): Data truncated for column 'Grade' at row 1

이번에는 SQL 모드를 변경한 후 다시 삽입해 보겠습니다. 아래와 같이 빈 문자열이 정상적으로 저장됩니다.

mysql> Set SQL_MODE ='';
Query OK, 0 rows affected (0.00 sec)

mysql> Insert into result(id, name, grade) values(100, 'Raman', '');
Query OK, 1 row affected, 1 warning (0.04 sec)

mysql> select * from result;
+-----+-------+-------+
| Id | Name | Grade |
+-----+-------+-------+
| 100 | Raman | |
+-----+-------+-------+
1 row in set (0.00 sec)

NULL 값 처리 방법

ENUM 컬럼에 NULL 값을 저장하려면 컬럼 선언 시 NOT NULL 제약 조건을 지정하지 않아야 합니다. NOT NULL이 없다면 MySQL은 ENUM 컬럼에 NULL 값을 허용합니다. 각 ENUM 값마다 인덱스 값이 존재하는데, NULL의 인덱스 값 역시 NULL입니다.

NULL 값 삽입 예제

mysql> Insert into result(id, name, grade) values(101, 'Rahul', NULL);
Query OK, 1 row affected (0.04 sec)

위 쿼리가 성공하는 이유는 ENUM 컬럼 선언 시 NOT NULL을 지정하지 않았기 때문입니다. 결과를 확인해 보면 NULL 값이 그대로 저장된 것을 볼 수 있습니다.

mysql> select * from result;
+-----+-------+-------+
| Id | Name | Grade |
+-----+-------+-------+
| 100 | Raman | |
| 101 | Rahul | NULL |
+-----+-------+-------+
2 rows in set (0.00 sec)

정리

  • 빈 값(''): SQL 모드가 엄격 모드(TRADITIONAL, STRICT_TRANS_TABLES, STRICT_ALL_TABLES)가 아니면 허용되며, 인덱스 값은 0입니다.
  • NULL 값: ENUM 컬럼에 NOT NULL이 지정되지 않은 경우에만 허용되며, 인덱스 값은 NULL입니다.