MySQL에서 특정 길이 이하의 문자열을 가진 행을 조회해야 하는 경우가 종종 있습니다. 이럴 때 CHAR_LENGTH() 함수를 활용하면 간단하게 해결할 수 있습니다. CHAR_LENGTH()는 문자열의 문자 개수를 반환하는 함수로, 이를 WHERE 절과 함께 사용하면 원하는 조건의 데이터를 손쉽게 필터링할 수 있습니다.
1. 테이블 생성하기
먼저 실습에 사용할 테이블을 생성해 보겠습니다.
mysql> create table DemoTable
-> (
-> Name varchar(100)
-> );
Query OK, 0 rows affected (1.38 sec)
2. 샘플 데이터 삽입하기
INSERT 명령을 사용하여 테이블에 여러 개의 레코드를 추가합니다.
mysql> insert into DemoTable values('John');
Query OK, 1 row affected (0.19 sec)
mysql> insert into DemoTable values('Bob');
Query OK, 1 row affected (1.60 sec)
mysql> insert into DemoTable values('Carol');
Query OK, 1 row affected (0.25 sec)
mysql> insert into DemoTable values('David');
Query OK, 1 row affected (1.83 sec)
mysql> insert into DemoTable values('Sam');
Query OK, 1 row affected (0.32 sec)3. 전체 레코드 확인하기
SELECT 문으로 테이블에 저장된 모든 데이터를 조회해 보겠습니다.
mysql> select *from DemoTable;
위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.
+-------+
| Name |
+-------+
| John |
| Bob |
| Carol |
| David |
| Sam |
+-------+
5 rows in set (0.00 sec)
4. 4자 미만 문자열 조회 쿼리
이제 핵심인, 문자열 길이가 4자 미만인 모든 행을 찾는 쿼리입니다. CHAR_LENGTH(Name) < 4 조건을 WHERE 절에 적용하면 됩니다.
mysql> select *from DemoTable where CHAR_LENGTH(Name) < 4;
실행 결과는 다음과 같습니다.
+------+
| Name |
+------+
| Bob |
| Sam |
+------+
2 rows in set (0.00 sec)
참고: CHAR_LENGTH()와 LENGTH()의 차이
MySQL에는 비슷한 함수로 LENGTH()가 있는데, 두 함수는 중요한 차이점이 있습니다. LENGTH()는 문자열의 바이트(byte) 수를 반환하는 반면, CHAR_LENGTH()는 실제 문자 수를 반환합니다. 따라서 한글처럼 한 문자가 여러 바이트를 차지하는 멀티바이트 문자셋을 다룰 때는 CHAR_LENGTH()를 사용하는 것이 정확한 글자 수 기준 조회에 적합합니다.
예를 들어 '홍길동'이라는 값은 UTF-8 기준으로 LENGTH()는 9를 반환하지만, CHAR_LENGTH()는 3을 반환합니다. 문자 개수를 기준으로 데이터를 필터링하려면 반드시 CHAR_LENGTH()를 사용하세요.