MySQLのLENGTH()関数による文字列の長さの測定方法とは?
MySQLのLENGTH()関数は、文字列の長さを「バイト数」で測定します。そのため、マルチバイトセーフ(マルチバイト対応)ではありません。CHAR_LENGTH()やCHARACTER_LENGTH()といったマルチバイトセーフな関数との結果の違いは、ほとんどの文字が2バイトでエンコードされるUnicodeや、文字ごとにバイト数が異なるUTF-8を扱う場合に特に重要になります。
たとえば、2バイト文字が4つ含まれる文字列の場合、LENGTH()関数は「8」を返しますが、CHAR_LENGTH()またはCHARACTER_LENGTH()関数は「4」を返します。以下の例で実際に確認してみましょう。
実行例
mysql> Select LENGTH('tutorialspoint');
+--------------------------+
| LENGTH('tutorialspoint') |
+--------------------------+
| 14 |
+--------------------------+
1 row in set (0.00 sec)上記の結果セットから、文字列「tutorialspoint」の長さは14であることがわかります。これは、この文字列がまだUnicode文字に変換されていないためです。次のクエリで、この文字列をUnicode文字に変換してみます。
mysql> SET @A = CONVERT('tutorialspoint' USING ucs2);
Query OK, 0 rows affected (0.02 sec)文字列をUnicodeに変換すると、LENGTH()関数の結果は14ではなく28になります。これは、Unicodeでは1文字が2バイトとして扱われるためです。以下にその様子を示します。
mysql> Select LENGTH(@A); +------------+ | LENGTH(@A) | +------------+ | 28 | +------------+ 1 row in set (0.00 sec)
一方、CHAR_LENGTH()関数はマルチバイトセーフな関数であるため、同じ文字列に対して結果は14となります。以下をご覧ください。
mysql> Select CHAR_LENGTH(@A); +-----------------+ | CHAR_LENGTH(@A) | +-----------------+ | 14 | +-----------------+ 1 row in set (0.00 sec)
まとめ
LENGTH()関数は文字列の長さをバイト数で返し、CHAR_LENGTH()関数は文字数を返します。日本語をはじめとするマルチバイト文字を扱う場合には、意図した通りの結果を得るためにCHAR_LENGTH()やCHARACTER_LENGTH()を使用することをおすすめします。
-
C#で文字列の長さを取得する方法を解説!String.Lengthプロパティの使い方
C#で文字列の長さを取得する基本 C#で文字列の長さ(文字数)を取得するには、String.Lengthプロパティを使用します。これは最もシンプルで一般的な方法です。 str.Length Lengthプロパティは、指定された文字列に含まれる文字数を計算して返します。例えば、文字列「Amit」の場合は4文字となるため、Lengthプロパティの戻り値は「4」になります。 string str = Amit; サンプルコード 以下は、C#で文字列の長さを計算して表示するプログラムの完全な例です。 using System; using System.Collections; namespace
-
【初心者向け】Pythonで文字列の長さを取得する方法をわかりやすく解説
Pythonで文字列の長さを取得する基本:len()関数Pythonには、文字列やリスト、タプルといった複合オブジェクトの長さ(要素数)を取得できる組み込み関数 len() が用意されています。文字列の長さを知りたい場合は、対象の文字列をそのまま len() の引数として渡すだけでOKです。print(len(abcdefghijklmnopqrstuvwxyz))出力結果:26変数に格納した文字列の長さを取得する実際の開発では、変数に代入した文字列の長さを調べる場面が多いでしょう。次のように、変数を len() に渡すだけで簡単に取得できます。text = Hello, Python! pr