MySQLで文字列をバイト単位で数える!(LENGTH関数)

MySQL MySQL

MySQLで文字列をバイト単位で数える方法について書いています。
文字列をバイト単位で数えるときにはLENGTH関数を使うと良いです。

公式のこちらにLENGTH関数についての記載があります。
載せているSQLはMySQLのバージョン8.0.32を使って動作を確認しています。

MySQLで文字列をバイト単位で数える

LENGTH関数を使うと、文字列をバイト単位で数えることができます。
例えば、下記のように使うことができます。

SELECT LENGTH('codelikes.com');

こうすると、渡した文字列をバイト数で返します。
実行すると、下記のように13が返ってきました。

mysql> SELECT LENGTH('codelikes.com');
+-------------------------+
| LENGTH('codelikes.com') |
+-------------------------+
|                      13 |
+-------------------------+
1 row in set (0.00 sec)

日本語(マルチバイト文字)を渡すと?

バイト単位で取得するので、日本語などのマルチバイト文字を渡すと、単純な文字数としては返ってきません。
例えば、下記のようにSQLを実行します。

mysql> SELECT LENGTH('りんご');
+---------------------+
| LENGTH('りんご')    |
+---------------------+
|                   9 |
+---------------------+
1 row in set (0.00 sec)

MySQLではデフォルトの文字コードがUTF8になっているので、日本語は1文字が3バイトです。
そのため、9バイトとして値が返ってきました。

CHAR_LENGTH関数との違い

CHAR_LENGTH関数では、マルチバイト文字も文字数として数えることができます。
先ほどの文字列をCHAR_LENGTH関数に渡すと、下記のようになります。

mysql> SELECT CHAR_LENGTH('りんご');
+--------------------------+
| CHAR_LENGTH('りんご')    |
+--------------------------+
|                        3 |
+--------------------------+
1 row in set (0.00 sec)

LENGTH関数はバイト数を取得して返していました。

このように、CHAR_LENGTH関数ではマルチバイトでも文字数として返してくれます。
単純な文字数を取得したいときにはCHAR_LENGTH関数を使いましょう。

NULLを渡した時は?

LENGTH関数にNULLを渡すと、NULLが返ってきます。

mysql> SELECT LENGTH(NULL);
+--------------+
| LENGTH(NULL) |
+--------------+
|         NULL |
+--------------+
1 row in set (0.00 sec)

「0」が返ってくるわけではないので、注意しましょう。

MySQLで文字列をバイト単位で数える方法まとめ

今回はMySQLで文字列の長さをバイト単位で数える、LENGTH関数について書きました。
記事の内容をまとめると、下記のようになります。

・LENGTH関数を使うと、文字列のバイト数が返ってくる。
・日本語などの文字数を数えるときには、CHAR_LENGTH関数を使う。
・NULLを渡すと、0ではなくNULLが返ってくるので気を付ける。

コメント

タイトルとURLをコピーしました