MySQL LENGTH() 関数は文字列の長さを「バイト」単位で測定します。これは、マルチバイトセーフではないことを意味します。 CHAR_LENGTH() や CHARACTER_LENGTH() などのマルチバイト セーフ関数と LENGTH() 関数の結果の違いは、ほとんどの文字が 2 バイトでエンコードされる Unicode と、バイト数が異なる UTF-8 に特に関係します。 。たとえば、文字列に 4 つの 2 バイト文字が含まれている場合、LENGTH() 関数は 8 を返し、CHAR_LENGTH() または CHARACTER_LENGTH() 関数は 4 を返します。次の例に示すように、
mysql> Select LENGTH('tutorialspoint'); +--------------------------+ | LENGTH('tutorialspoint') | +--------------------------+ | 14 | +--------------------------+ 1 row in set (0.00 sec)
上記の結果セットは、文字列「tutorialspoint」の長さが Unicode 文字に変換されていないため、14 であることを示しています。次のクエリは、文字列を Unicode 文字に変換します。-
mysql> SET @A = CONVERT('tutorialspoint' USING ucs2); Query OK, 0 rows affected (0.02 sec)
文字列を Unicode に変換すると、結果は 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)
以上がMySQL LENGTH() 関数はどのように文字列の長さを測定しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。