1. ホーム
  2. マイスル

[解決済み] MySQL - length() vs char_length()

2022-04-06 22:34:03

質問

との主な違いは何ですか? 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

見ての通り、ユーロ記号は3バイトを占めます(エンコードは 0xE282AC UTF-8では1文字ですが。