MySQLで文字列の長さを数える方法について書いています。
CHAR_LENGTH関数を使うことで、文字列の長さを数えることができます。
公式のこちらにCHAR_LENGTH関数についての記載があります。
載せているSQLはMySQLのバージョン8.0.32を使って動作を確認しています。
MySQLで文字列の長さを数える
CHAR_LENGTH関数を使うと、文字列の長さを数えることができます。
例えば、下記のように使うことができます。
SELECT CHAR_LENGTH('コードライク');
CHAR_LENGTH関数に渡した文字列の長さを数えてくれます。
今回は文字列を直接指定していますが、テーブルからカラムを指定して、カラムに格納されている文字列の長さを数えることもできます。
実際に実行すると、下記のように文字列の長さとして「6」が返ってきました。
mysql> SELECT CHAR_LENGTH('コードライク');
+-----------------------------------+
| CHAR_LENGTH('コードライク') |
+-----------------------------------+
| 6 |
+-----------------------------------+
1 row in set (0.00 sec)
LENGTH関数との違いは?
LENGTH関数は文字列のバイト数を返すので、文字列を渡すと、文字列ではなくバイト数が返ってきます。
バイト数は日本語などのマルチバイト文字のときには、文字数よりも多くなるので、文字数をカウントすることができません。
CHAR_LENGTH関数はバイト数に関係なく、1文字は1文字としてカウントしてくれます。
そのため、下記のようにマルチバイト文字をそれぞれの関数に渡すと、挙動が違うことがわかります。
mysql> SELECT LENGTH('ぶどう'), CHAR_LENGTH('ぶどう');
+---------------------+--------------------------+
| LENGTH('ぶどう') | CHAR_LENGTH('ぶどう') |
+---------------------+--------------------------+
| 9 | 3 |
+---------------------+--------------------------+
1 row in set (0.00 sec)
LENGTH関数では、文字列がマルチバイト文字なので、1文字3バイトで計算されて「9」が返ってきました。
CHAR_LENGTH関数では、マルチバイト文字でもそのまま数えてくれるので「3」になりました。
NULLを渡すと?
CHAR_LENGTH関数にNULLを渡すと、NULLが返ってきます。
mysql> SELECT CHAR_LENGTH(NULL);
+-------------------+
| CHAR_LENGTH(NULL) |
+-------------------+
| NULL |
+-------------------+
1 row in set (0.00 sec)
0ではないので、気をつけましょう。
CHARACTER_LENGTH関数は別名
CHARACTER_LENGTH関数は、CHAR_LENGTH関数の別名になります。
そのため、下記のように同じ文字列を渡すと、同じ結果が返ってきます。
mysql> SELECT CHAR_LENGTH('コードライクホゲホゲ'), CHARACTER_LENGTH('コードライ クホゲホゲ');
+-----------------------------------------------+----------------------------------------------------+
| CHAR_LENGTH('コードライクホゲホゲ') | CHARACTER_LENGTH('コードライクホゲホゲ') |
+-----------------------------------------------+----------------------------------------------------+
| 10 | 10 |
+-----------------------------------------------+----------------------------------------------------+
1 row in set (0.00 sec)
MySQLで文字列の長さを数える方法まとめ
今回はMySQLで文字列の長さを数える方法について書きました。
記事の内容をまとめると、下記のようになります。
・CHAR_LENGTH関数にNULLを渡すと、NULLが返る。(0ではないので注意)
・CHARACTER_LENGTH関数はCHAR_LENGTH関数のシノニム(別名)だった。
コメント