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

NOT NULL로 정의된 MySQL 열에 0 또는 빈 문자열을 삽입하는 방법

NOT NULL 열에 0이나 빈 문자열을 넣을 수 있는 이유

열을 'NOT NULL'로 선언한다는 것은 해당 열이 NULL 값을 허용하지 않는다는 의미입니다. 하지만 0과 빈 문자열('')은 그 자체로 유효한 값이기 때문에, NOT NULL로 정의된 MySQL 열에 0이나 빈 문자열을 삽입하는 데에는 전혀 문제가 없습니다.

여기서 중요한 점은 NULL이 '값이 없음(NO VALUE)'을 의미한다는 것입니다. 즉, NULL은 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이 아님을 보여줍니다. 즉, 0은 그 자체로 하나의 값이며, NULL처럼 '값이 없는 상태'가 아니라는 뜻입니다.

빈 문자열과 NULL 비교

mysql> Select '' IS NULL, '' IS NOT NULL;
+------------+----------------+
| '' IS NULL | '' IS NOT NULL |
+------------+----------------+
|          0 |              1 |
+------------+----------------+
1 row in set (0.00 sec)

마찬가지로 위 결과 집합은 빈 문자열('')이 NULL이 아님을 보여줍니다. 빈 문자열도 그 자체로 하나의 값으로 취급되므로 NOT 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과 빈 문자열('')을 성공적으로 삽입할 수 있습니다.

주의 사항

예제에서 눈여겨볼 점은 INT 타입의 id 열에 빈 문자열('')을 삽입했을 때 경고(Warning Code 1366)가 발생하고, 해당 값이 자동으로 0으로 변환되어 저장된다는 것입니다. 이는 MySQL이 엄격 모드(strict mode)가 아닐 때 나타나는 동작으로, 데이터 타입이 일치하지 않는 값을 삽입할 경우 예상치 못한 결과가 저장될 수 있으므로 주의해야 합니다.