web-dev-qa-db-ja.com

MySQL-length()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)
202
Yada

LENGTH()は、バイト単位の文字列の長さを返します。
CHAR_LENGTH()は、文字で測定される文字列の長さを返します。

これは、ほとんどの文字が2バイトでエンコードされるUnicodeに特に関連します。または、バイト数が異なるUTF-8。例えば:

select length(_utf8 '€'), char_length(_utf8 '€')
--> 3, 1

ご覧のとおり、ユーロ記号は1バイトだけですが、3バイトを占有します(UTF-8では0xE282ACとしてエンコードされます)。

333
Andomar

varchar(10)は10文字を格納しますが、これは10バイトを超える場合があります。インデックスでは、フィールドの最大長を割り当てます-したがって、UTF8-mb4を使用している場合、10文字のフィールドに40バイトを割り当てます。

17
Brent