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バイトでエンコードされるUnicodeに特に関連します。または、バイト数が異なるUTF-8。例えば:
select length(_utf8 '€'), char_length(_utf8 '€')
--> 3, 1
ご覧のとおり、ユーロ記号は1バイトだけですが、3バイトを占有します(UTF-8では0xE282AC
としてエンコードされます)。
varchar(10)は10文字を格納しますが、これは10バイトを超える場合があります。インデックスでは、フィールドの最大長を割り当てます-したがって、UTF8-mb4を使用している場合、10文字のフィールドに40バイトを割り当てます。