innoDB에서 NULL은 빈 문자열에 비해 공간을 덜 차지합니다. 또한 NULL 길이는 null이고 빈 문자열의 길이는 0입니다.
이것을 이해하기 위해 다음과 같이 주어진 create 명령의 도움으로 테이블이 생성됩니다 -
mysql> CREATE table DemoEmptyAndNULL -> ( -> Message varchar(100) -> ); Query OK, 0 rows affected (0.49 sec)
테이블을 성공적으로 생성한 후 다음과 같은 help ofinsert 명령을 사용하여 빈 레코드가 테이블에 삽입됩니다 -
mysql> INSERT into DemoEmptyAndNULL values(' '); Query OK, 1 row affected (0.17 sec)
레코드를 삽입한 후 다음과 같이 select 명령을 사용하여 모든 레코드를 표시할 수 있습니다. -
mysql> SELECT * from DemoEmptyAndNULL;
위의 쿼리를 실행한 후 다음과 같은 출력을 얻습니다. -
+---------+ | Message | +---------+ | | +---------+ 1 row in set (0.00 sec)
내장 함수 카운트의 도움으로 빈 문자열의 길이를 확인하는 구문은 다음과 같습니다 -
select count(column_name) from yourTableName;
위의 구문은 다음과 같이 주어진 빈 문자열의 길이를 얻는 데 사용됩니다 -
mysql> select count(message) from DemoEmptyAndNULL;
위의 쿼리를 실행한 후 출력은 다음과 같습니다. -
+----------------+ | count(message) | +----------------+ | 1 | +----------------+ 1 row in set (0.06 sec)
위의 출력에서 빈 문자열의 길이가 1임을 알 수 있습니다.
이제 NULL의 길이를 확인합니다. 먼저 다음과 같이 delete 명령어를 사용하여 테이블에 삽입된 레코드를 삭제한다 -
mysql> delete from DemoEmptyAndNULL where message=' '; Query OK, 1 row affected (0.19 sec)
다음 쿼리는 현재 테이블에 레코드가 없는지 확인하는 데 사용됩니다.
mysql> SELECT * from DemoEmptyAndNULL; Empty set (0.00 sec)
이제 null 값이 있는 레코드가 다음과 같이 테이블에 삽입됩니다. -
mysql> INSERT into DemoEmptyAndNULL values(); Query OK, 1 row affected (0.18 sec)
레코드는 선택 명령을 사용하여 표시되며 얻은 출력은 다음과 같습니다. -
+---------+ | Message | +---------+ | NULL | +---------+ 1 row in set (0.00 sec)
이제 테이블에는 null 값이 있는 레코드가 하나만 있습니다. 다음 쿼리를 사용하여 길이를 찾으려면 −
mysql> select count(message) from DemoEmptyAndNULL;
다음은 위 쿼리의 출력입니다 -
+----------------+ | count(message) | +----------------+ | 0 | +----------------+ 1 row in set (0.00 sec)
위의 출력은 null 값의 경우 count가 0임을 의미합니다.
MySQL 버전을 확인해보자.
mysql> select version(); +-----------+ | version() | +-----------+ | 8.0.12 | +-----------+ 1 row in set (0.06 sec)
따라서 NULL 값을 허용하면 시스템이 추가 작업을 수행하고 찾고 있는 데이터를 제공하지 않으므로 데이터베이스에 빈 문자열을 사용하는 것이 좋습니다. 그러나 count() 함수가 실행될 때 NULL은 예외를 throw하지 않습니다.