MySQL에서 문자열 길이를 측정하는 OCTET_LENGTH() 함수는 문자열의 길이를 '바이트(byte)' 단위로 반환하기 때문에 LENGTH() 함수의 동의어(synonym)입니다.
OCTET_LENGTH() 함수의 기본 문법
이 함수의 기본 문법은 다음과 같습니다.
OCTET_LENGTH(Str)
여기서 Str은 바이트 단위의 길이를 구하고자 하는 문자열을 의미합니다.
멀티바이트(Multi-byte) 처리 특성
OCTET_LENGTH() 함수는 LENGTH() 함수와 마찬가지로 멀티바이트 안전(multi-byte safe)하지 않습니다. 즉, 한글이나 유니코드처럼 한 문자가 여러 바이트를 차지하는 경우 실제 문자 수가 아닌 바이트 수를 그대로 반환합니다.
예를 들어, 문자열에 2바이트짜리 문자가 네 개 포함되어 있다면 OCTET_LENGTH() 함수는 4가 아닌 8을 반환합니다.
예제 1: 일반 ASCII 문자열
mysql> Select OCTET_LENGTH('tutorialspoint');
+--------------------------------+
| OCTET_LENGTH('tutorialspoint') |
+--------------------------------+
| 14 |
+--------------------------------+
1 row in set (0.00 sec)위 결과에서 문자열 'tutorialspoint'의 길이가 14로 반환된 이유는, 각 문자가 아직 유니코드(Unicode)로 변환되지 않아 1바이트씩 차지하기 때문입니다.
예제 2: 유니코드(ucs2)로 변환한 경우
다음 쿼리를 사용하면 해당 문자열을 유니코드 문자셋(ucs2)으로 변환할 수 있습니다.
mysql> SET @A = CONVERT('tutorialspoint' USING ucs2);
Query OK, 0 rows affected (0.02 sec)문자열을 유니코드로 변환한 후 다시 길이를 확인해 보면 결과가 달라집니다.
mysql> Select OCTET_LENGTH(@A); +------------------+ | OCTET_LENGTH(@A) | +------------------+ | 28 | +------------------+ 1 row in set (0.00 sec)
결과가 14가 아닌 28로 반환된 이유는, 유니코드(ucs2)에서는 하나의 문자가 2바이트를 차지하기 때문입니다. 즉, 14개의 문자 × 2바이트 = 28바이트가 되는 것입니다.
정리
OCTET_LENGTH() 함수는 LENGTH() 함수와 동일하게 동작하며, 문자 수가 아닌 바이트 수를 기준으로 길이를 계산합니다. 따라서 영문·숫자 등 1바이트 문자만 사용할 경우 두 함수의 결과가 같지만, 한글이나 유니코드 문자가 포함된 경우 결과가 달라질 수 있으므로 주의해서 사용해야 합니다.