사이의 주요 차이점은 무엇 length()
과 char_length()
?
이진 및 이진이 아닌 문자열과 관련이 있다고 생각합니다. 문자열을 이진으로 저장해야하는 실질적인 이유가 있습니까?
mysql> select length('MySQL'), char_length('MySQL');
+-----------------+----------------------+
| length('MySQL') | char_length('MySQL') |
+-----------------+----------------------+
| 5 | 5 |
+-----------------+----------------------+
1 row in set (0.01 sec)
답변
LENGTH()
바이트 단위로 측정 한 문자열 의 길이를 반환합니다 . 문자로 측정 된 문자열
CHAR_LENGTH()
의 길이를 반환합니다 .
이것은 대부분의 문자가 2 바이트로 인코딩되는 유니 코드와 관련이 있습니다. 또는 바이트 수가 다른 UTF-8. 예를 들면 다음과 같습니다.
select length(_utf8 '€'), char_length(_utf8 '€')
--> 3, 1
보시다시피 유로 부호는 0xE282AC
하나의 문자 일지라도 3 바이트 ( UTF-8 로 인코딩 됨) 를 차지 합니다.
답변
varchar (10)은 10자를 초과 할 수있는 10자를 저장합니다. 인덱스에서는 필드의 최대 길이를 할당하므로 UTF8-mb4를 사용하는 경우 10 자 필드에 40 바이트를 할당합니다.