CHAR_LENGTH() 함수란?
MySQL에서 CHAR_LENGTH() 함수는 문자열의 길이를 문자 수 기준으로 반환합니다. 매개변수로 전달된 문자열의 길이를 확인하는 간단한 예제를 살펴보겠습니다.
mysql> select char_length('John');실행 결과는 다음과 같습니다.
+---------------------+
| char_length('John') |
+---------------------+
| 4 |
+---------------------+
1 row in set (0.00 sec)'John'은 4개의 문자로 구성되어 있으므로 결과값으로 4가 반환됩니다.
LENGTH() 함수란?
LENGTH() 함수는 문자열의 길이를 바이트(byte) 단위로 측정하여 반환합니다. 일반적인 영문(ASCII) 문자의 경우 문자 수와 바이트 수가 동일하기 때문에, 많은 경우 두 함수는 같은 결과를 반환합니다.
다음은 LENGTH() 함수의 사용 예제입니다.
mysql> select length('Tim');실행 결과는 다음과 같습니다.
+---------------------+
| length('Tim') |
+---------------------+
| 3 |
+---------------------+
1 row in set (0.00 sec)두 함수의 결정적 차이: 유니코드(Unicode)
일반 영문 문자열에서는 LENGTH()와 CHAR_LENGTH()가 동일한 결과를 반환하지만, 유니코드가 적용된 경우에는 결과가 달라집니다. 유니코드에서는 모든 문자가 2바이트를 차지하기 때문입니다.
이를 확인하기 위해 유니코드 컬럼을 포함한 테이블을 생성해 보겠습니다.
mysql> create table LengthAndCharLengthDemo -> ( -> FirstName varchar(200), -> SecondName varchar(255) unicode -> ); Query OK, 0 rows affected (0.49 sec)
테이블에 레코드를 삽입합니다.
mysql> insert into LengthAndCharLengthDemo values('John','Ritter');
Query OK, 1 row affected (0.22 sec)SELECT 문을 사용하여 테이블의 모든 레코드를 조회합니다.
mysql> select * from LengthAndCharLengthDemo;
실행 결과는 다음과 같습니다.
+-----------+------------+ | FirstName | SecondName | +-----------+------------+ | John | Ritter | +-----------+------------+ 1 row in set (0.00 sec)
이제 두 함수를 사용하여 실제 길이를 비교해 보겠습니다.
mysql> select char_length(FirstName), length(SecondName) from LengthAndCharLengthDemo -> where FirstName='John';
실행 결과는 다음과 같습니다.
+------------------------+--------------------+ | char_length(FirstName) | length(SecondName) | +------------------------+--------------------+ | 4 | 8 | +------------------------+--------------------+ 1 row in set (0.70 sec)
위 실행 결과에서 확인할 수 있듯이, 유니코드가 적용된 컬럼에 대해 LENGTH() 함수는 8바이트를 반환하는 반면, CHAR_LENGTH() 함수는 4를 반환합니다. 이는 유니코드 환경에서 각 문자가 2바이트씩 차지하기 때문입니다.
핵심 정리
- CHAR_LENGTH(): 문자열의 길이를 문자 개수 기준으로 반환
- LENGTH(): 문자열의 길이를 바이트 단위로 반환
- ASCII 문자에서는 두 함수의 결과가 동일함
- 유니코드 등 멀티바이트 문자에서는 LENGTH()가 더 큰 값을 반환하므로 주의 필요