두 함수 모두 문자열 함수이며 문자열에 있는 문자 수를 반환합니다. 그러나 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)