[mysql] MySQL-길이 () vs char_length ()

사이의 주요 차이점은 무엇 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 바이트를 할당합니다.


답변