Computer >> 컴퓨터 >  >> 프로그램 작성 >> MySQL

MySQL LENGTH() 함수는 어떻게 문자열 길이를 측정합니까?


MySQL LENGTH() 함수는 문자열 길이를 '바이트' 단위로 측정하므로 멀티바이트 안전하지 않습니다. CHAR_LENGTH() 또는 CHARACTER_LENGTH()와 같은 다중 바이트 안전 함수와 대부분의 문자가 2바이트로 인코딩되거나 UTF-8과 관련된 유니코드와 관련된 LENGTH() 함수 간의 결과 차이 바이트 수가 다릅니다. 예를 들어, 문자열에 4개의 2바이트 문자가 포함된 경우 LENGTH() 함수는 8을 반환하는 반면 CHAR_LENGTH() 또는 CHARACTER_LENGTH() 함수는 4를 반환합니다. 아래 예에서 설명합니다. -

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

위의 결과 집합은 'tutorialspoint' 문자열의 길이가 아직 유니코드 문자로 변환되지 않았기 때문에 14임을 보여줍니다. 다음 쿼리는 이를 유니코드 문자로 변환합니다 -

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

유니코드로 문자열을 변환한 후 결과는 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)