MySQL에서 데이터 열(column)에 저장된 문자 수를 계산하려면 OCTET_LENGTH() 함수의 인수로 해당 열 이름을 전달하기만 하면 됩니다. 이 함수는 SELECT 절에서 참조하면 각 행의 길이를 결과에 함께 표시해 주며, WHERE 절에서 사용하면 비교 값으로 활용되어 특정 조건을 만족하는 행만 반환할지 여부를 판단할 수도 있습니다.
OCTET_LENGTH() 함수의 기본 개념
OCTET_LENGTH() 함수는 인수로 전달된 문자열 또는 열 값의 옥텟(바이트) 길이를 반환합니다. latin1과 같은 단일 바이트 문자 집합을 사용하는 경우 바이트 수와 문자 수가 동일하므로, 문자 수를 세는 용도로 그대로 활용할 수 있습니다.
SELECT 절에서 활용하기
SELECT 절에서 이 함수를 호출하면 각 행에 저장된 값의 길이가 별도의 열로 출력됩니다. 아래 예시는 'Student' 테이블의 Name 열에 저장된 이름들의 길이를 확인하는 방법을 보여줍니다.
mysql> Select Name, OCTET_LENGTH(Name) As 'Str_Length' from Student; +---------+------------+ | Name | Str_Length | +---------+------------+ | Gaurav | 6 | | Aarav | 5 | | Harshit | 7 | | Gaurav | 6 | | Yashraj | 7 | +---------+------------+ 5 rows in set (0.00 sec)
WHERE 절에서 조건 비교로 활용하기
OCTET_LENGTH() 함수를 WHERE 절에 사용하면 길이 값을 기준으로 조건을 걸어 원하는 행만 필터링할 수 있습니다. 아래 예시는 이름 길이가 7 미만인 학생들만 조회한 결과입니다.
mysql> Select Name, OCTET_LENGTH(Name) As 'Str_Length' from Student Where OCTET_LENGTH(Name) < 7; +--------+------------+ | Name | Str_Length | +--------+------------+ | Gaurav | 6 | | Aarav | 5 | | Gaurav | 6 | +--------+------------+ 3 rows in set (0.06 sec)
OCTET_LENGTH()와 CHAR_LENGTH()의 차이점
OCTET_LENGTH()는 문자열의 바이트 수를 반환하는 반면, CHAR_LENGTH()는 실제 문자 수를 반환합니다. UTF-8처럼 멀티바이트 문자 집합을 사용하는 환경에서는 한글이나 특수문자가 2~3바이트로 계산되므로 두 함수의 결과가 달라질 수 있습니다. 따라서 순수한 문자 개수가 필요한 경우에는 CHAR_LENGTH()를 사용하는 것이 더 적합합니다.