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

MySQL LENGTH() 함수로 문자열 길이를 측정하는 방법

MySQL의 LENGTH() 함수는 문자열의 길이를 바이트(byte) 단위로 측정합니다. 즉, 이 함수는 멀티바이트(multibyte)에 안전하지 않습니다. CHAR_LENGTH()나 CHARACTER_LENGTH()처럼 멀티바이트에 안전한 함수와 LENGTH() 함수의 결과 차이는 유니코드(Unicode) 환경에서 특히 중요합니다. 유니코드에서는 대부분의 문자가 2바이트로 인코딩되고, UTF-8에서는 문자마다 필요한 바이트 수가 달라지기 때문입니다.

예를 들어, 어떤 문자열이 2바이트짜리 문자 4개로 구성되어 있다면 LENGTH() 함수는 8을 반환하는 반면, CHAR_LENGTH() 또는 CHARACTER_LENGTH() 함수는 4를 반환합니다.

예제

먼저 일반 문자열에 대해 LENGTH() 함수를 실행해 보겠습니다.

mysql> Select LENGTH('tutorialspoint');
+--------------------------+
| LENGTH('tutorialspoint') |
+--------------------------+
|                       14 |
+--------------------------+
1 row in set (0.00 sec)

위 결과에서 알 수 있듯이 문자열 'tutorialspoint'의 길이는 14입니다. 이는 해당 문자열이 아직 유니코드 문자로 변환되지 않았기 때문입니다.

유니코드(ucs2)로 변환 후 비교

다음 쿼리는 이 문자열을 유니코드 문자로 변환합니다.

mysql> SET @A = CONVERT('tutorialspoint' USING ucs2);
Query OK, 0 rows affected (0.02 sec)

문자열을 유니코드로 변환한 뒤 다시 LENGTH() 함수를 실행하면 결과가 14가 아닌 28이 됩니다. 유니코드에서는 한 문자가 2바이트를 차지하기 때문입니다.

mysql> Select LENGTH(@A);
+------------+
| LENGTH(@A) |
+------------+
|         28 |
+------------+
1 row in set (0.00 sec)

반면 멀티바이트에 안전한 함수인 CHAR_LENGTH()를 사용하면 아래와 같이 14라는 결과를 얻을 수 있습니다.

mysql> Select CHAR_LENGTH(@A);
+-----------------+
| CHAR_LENGTH(@A) |
+-----------------+
|              14 |
+-----------------+
1 row in set (0.00 sec)

정리

  • LENGTH(): 문자열 길이를 바이트 단위로 반환하며, 멀티바이트 문자를 안전하게 처리하지 못함
  • CHAR_LENGTH() / CHARACTER_LENGTH(): 문자 개수 기준으로 길이를 반환하며, 멀티바이트에 안전함

따라서 한글, 일본어, 중국어 등 멀티바이트 문자를 다루는 경우에는 실제 문자 수를 구하려면 CHAR_LENGTH() 함수를 사용하는 것이 좋습니다.