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

ENUM에 잘못된 값을 삽입하면 어떤 MySQL이 반환됩니까?

<시간/>

엄격한 SQL 모드가 비활성화되고 잘못된 값(허용된 열거 값 목록에 없음)을 ENUM에 삽입하면 MySQL은 오류를 발생시키는 대신 빈 문자열을 삽입합니다. 그러나 엄격한 SQL 모드가 활성화된 경우 MySQL은 잘못된 값을 삽입할 때 오류를 발생시킵니다.

엄격한 SQL 모드를 비활성화한 후 다음과 같이 잘못된 문자열을 ENUM에 삽입합니다. -

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

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

위 쿼리에서 MySQL이 잘못된 문자열 위치에 빈 문자열을 삽입했으며 오류가 발생하지 않았음을 알 수 있습니다.

이제 다음 쿼리의 도움으로 인덱스 번호 0을 얻을 수 있으며 빈 문자열의 인덱스 값은 항상 0이기 때문에 MySQL이 삽입한 문자열이 빈 문자열임을 확인합니다.

mysql> Select Grade + 0 from result;
+-----------+
| Grade + 0 |
+-----------+
| 0         |
+-----------+
1 row in set (0.00 sec)

그러나 아래 쿼리와 같이 SQL 엄격 모드를 활성화한 후 MySQL은 ENUM에 잘못된 문자열을 삽입할 때 오류가 발생합니다.

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

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