'NOT NULL' 열을 선언한다는 것은 이 열이 NULL 값을 허용하지 않지만 영(0)이고 빈 문자열 자체가 값임을 의미합니다. 따라서 NOT NULL로 정의된 MySQL 열에 0 또는 빈 문자열을 삽입하려는 경우 문제가 없습니다. 0과 빈 문자열을 NULL로 비교하면 다음이 명확해집니다. −
mysql> Select 0 IS NULL, 0 IS NOT NULL; +-----------+---------------+ | 0 IS NULL | 0 IS NOT NULL | +-----------+---------------+ | 0 | 1 | +-----------+---------------+ 1 row in set (0.00 sec)
위의 결과 집합은 영(0)이 NULL이 아님을 보여줍니다. NULL은 값이 없음을 의미한다는 것을 알고 있기 때문에 영(0)은 값 자체를 의미합니다.
mysql> Select '' IS NULL, '' IS NOT NULL; +------------+----------------+ | '' IS NULL | '' IS NOT NULL | +------------+----------------+ | 0 | 1 | +------------+----------------+ 1 row in set (0.00 sec)
위의 결과 집합은 빈 문자열('')이 NULL이 아님을 보여줍니다. 빈 문자열('')은 값 자체를 의미합니다. 왜냐하면 NULL은 값이 없음을 의미하기 때문입니다.
예시
mysql> create table test(id int NOT NULL, Name Varchar(10)); Query OK, 0 rows affected (0.19 sec) mysql> Insert into test6(id, name) values('1', 'Gaurav'),('0','Rahul'),('','Aarav'); Query OK, 3 rows affected, 1 warning (0.08 sec) Records: 3 Duplicates: 0 Warnings: 1 Warning (Code 1366): Incorrect integer value: '' for column 'id' at row 3 mysql> Select * from test; +----+--------+ | id | Name | +----+--------+ | 1 | Gaurav | | 0 | Rahul | | 0 | Aarav | +----+--------+ 3 rows in set (0.00 sec)
위의 결과 집합에서 NOT NULL로 선언된 열에 빈 문자열('')을 0(0)으로 삽입할 수 있음을 관찰할 수 있습니다.