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

MySQL에서 특정 길이의 문자열 필드 조회하기: char_length()와 length() 완벽 가이드

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를 반환하게 됩니다. 따라서 다국어 데이터를 다룰 때는 의도에 맞는 함수를 신중하게 선택하는 것이 중요합니다.