Computer >> 컴퓨터 >  >> 프로그램 작성 >> MySQL

MySQL은 열거형의 빈 값과 null 값을 어떻게 처리합니까?

<시간/>

MySQL은 SQL 모드가 TRADITIONAL, STRICT_TRANS_TABLES 또는 STRICT_ALL_TABLES로 설정되지 않은 경우에만 열거를 위해 빈 값을 허용합니다. 그렇지 않으면 MySQL은 빈 값을 허용하지 않고 오류를 발생시킵니다. 각 열거 값에 인덱스 값이 있다는 것을 알고 있으므로 빈 값은 인덱스 값이 0입니다.

예시

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)

MySQL은 ENUM 열에 NOT NULL을 지정하지 않은 경우에만 열거를 위해 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)