MySQL에서 특정 길이를 가진 문자열 필드를 조회하려면 char_length() 함수 또는 length() 함수를 사용하면 됩니다. 두 함수는 비슷해 보이지만 측정 단위가 다르다는 점에서 중요한 차이가 있습니다.
기본 문법
Case 1: char_length() 사용
문자열의 길이를 문자 수 기준으로 측정할 때 사용합니다. 한글처럼 멀티바이트 문자를 다룰 때도 글자 수 그대로 계산되므로 직관적입니다.
select * from yourTableName where char_length(yourColumnName) = anySpecificLengthValue;
Case 2: length() 사용
문자열의 길이를 바이트 수 기준으로 측정할 때 사용합니다. 인코딩 방식에 따라 같은 문자라도 차지하는 바이트 수가 달라질 수 있으므로 주의가 필요합니다.
select * from yourTableName where length(yourColumnName) = anySpecificLengthValue;
실습 예제
개념을 이해하기 위해 먼저 테이블을 생성해 보겠습니다. 테이블 생성 쿼리는 다음과 같습니다.
mysql> create table StringWithSpecificLength -> ( -> Id int, -> Name varchar(100), -> FavouriteLanguage varchar(50) -> ); Query OK, 0 rows affected (0.52 sec)
insert 명령을 사용하여 테이블에 레코드를 삽입합니다. 쿼리는 다음과 같습니다.
mysql> insert into StringWithSpecificLength values(1,'John','Java'); Query OK, 1 row affected (0.66 sec) mysql> insert into StringWithSpecificLength values(2,'Bob','PHP'); Query OK, 1 row affected (0.17 sec) mysql> insert into StringWithSpecificLength values(3,'Carol','Python'); Query OK, 1 row affected (0.16 sec) mysql> insert into StringWithSpecificLength values(4,'Sam','Ruby'); Query OK, 1 row affected (0.25 sec) mysql> insert into StringWithSpecificLength values(5,'Mike','Pascal'); Query OK, 1 row affected (0.19 sec)
select 문을 사용하여 테이블의 모든 레코드를 조회합니다.
mysql> select *from StringWithSpecificLength;
출력 결과
+------+-------+-------------------+ | Id | Name | FavouriteLanguage | +------+-------+-------------------+ | 1 | John | Java | | 2 | Bob | PHP | | 3 | Carol | Python | | 4 | Sam | Ruby | | 5 | Mike | Pascal | +------+-------+-------------------+ 5 rows in set (0.00 sec)
특정 길이의 문자열 조회하기
이제 char_length() 함수를 활용하여 FavouriteLanguage 컬럼의 길이가 정확히 6자인 레코드를 조회하는 쿼리입니다.
mysql> select *from StringWithSpecificLength where char_length(FavouriteLanguage)=6;
출력 결과
+------+-------+-------------------+ | Id | Name | FavouriteLanguage | +------+-------+-------------------+ | 3 | Carol | Python | | 5 | Mike | Pascal | +------+-------+-------------------+ 2 rows in set (0.00 sec)
결과를 보면 'Python'과 'Pascal'은 모두 6글자이므로 정상적으로 조회된 것을 확인할 수 있습니다.
char_length()와 length()의 차이점
두 함수의 핵심 차이를 정리하면 다음과 같습니다.
- char_length(): 문자 개수를 반환합니다. UTF-8 환경에서 한글 1글자도 1로 계산됩니다.
- length(): 바이트 수를 반환합니다. UTF-8에서 한글 1글자는 보통 3바이트로 계산됩니다.
예를 들어 'Python'이라는 영문 문자열은 두 함수 모두 6을 반환하지만, '파이썬'이라는 한글 문자열은 char_length()로는 3, length()로는 9를 반환하게 됩니다. 따라서 다국어 데이터를 다룰 때는 의도에 맞는 함수를 신중하게 선택하는 것이 중요합니다.