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

MySQL LENGTH()와 CHAR_LENGTH() 함수의 차이점은 무엇입니까?

<시간/>

두 함수 모두 문자열 함수이며 문자열에 있는 문자 수를 반환합니다. 그러나 CHAR_LENGTH() 함수는 '문자'로 문자열 길이를 측정하는 반면 LENGTH() 함수는 '바이트'로 문자열 길이를 측정한다는 개념에서 다릅니다. 즉, CHAR_LENGTH() 함수는 다중 바이트에 안전하다고 말할 수 있습니다. 즉, 문자가 단일 바이트인지 다중 바이트인지를 무시합니다. 예를 들어 문자열에 4개의 2바이트 문자가 포함되어 있으면 LENGTH()가 됩니다.

함수는 8을 반환하고 CHAR_LENGTH() 함수는 4를 반환합니다. 이런 의미에서 CHAR_LENGTH()가 LENGTH() 함수보다 정확한 결과를 제공한다고 말할 수 있습니다.

차이점은 특히 대부분의 문자가 2바이트로 인코딩되는 유니코드와 관련이 있거나 바이트 수가 다양한 UTF-8과 관련이 있습니다. 아래 예에서 설명합니다 -

예시

아래 예에서는 우선 'Gaurav' 문자열을 uc2로 변환합니다. , 즉 유니코드이며 2바이트 문자, 문자 집합을 보유합니다. 그런 다음 결과 집합과의 차이를 관찰할 수 있습니다. 즉, LENGTH()는 바이트 수로 길이를 반환하고 CHAR_LENGTH()는 여러 문자로 길이를 반환합니다.

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

mysql> Select Char_length(@A), LENGTH(@A);

+-----------------+------------+
| Char_length(@A) | LENGTH(@A) |
+-----------------+------------+
| 6               | 12         |
+-----------------+------------+

1 row in set (0.03 sec)

이제 아래 예에서는 UTF-8의 특수 문자를 사용하고 있습니다. , 바이트 수가 다양하고 문자 집합이 다릅니다. 그러면 결과 집합과의 차이를 관찰할 수 있습니다.

mysql> SET @B = CONVERT('©' USING utf8);
Query OK, 0 rows affected (0.15 sec)

mysql> Select CHAR_LENGTH(@B);

+-----------------------+
| CHAR_LENGTH(@B)       |
+-----------------------+
| 1                     |
+-----------------------+

1 row in set (0.00 sec)

mysql> Select LENGTH(@B);

+---------------+
| LENGTH(@B)    |
+---------------+
| 2             |
+---------------+

1 row in set (0.00 sec)