MySQLでは、length()
が何度も発生します 関数とchar_length()
関数はまったく同じ結果を提供します。ただし、結果がまったく異なる場合もあります。その理由は次のとおりです。
まず、これらの各関数の定義は次のとおりです。
-
char_length()
- 文字列の長さを文字数で返します。
-
length()
- 文字列の長さをバイト単位で返します。
「文字」と「バイト」に注意してください。1つは文字で測定されます。 、もう1つはバイトで測定されます 。
多くの場合、バイト数は文字列の文字数と同じになりますが、常にそうであるとは限りません。 1文字あたりに使用されるバイト数は、データの保存方法によって異なります。たとえば、文字列がUnicodeデータとして保存されている場合、1文字あたり2バイトになります。
ASCIIテキストを使用した基本的な例(両方の関数が同じ結果を返す場合):
SELECT CHAR_LENGTH('Lit'), LENGTH('Lit');
結果:
+--------------------+---------------+ | CHAR_LENGTH('Lit') | LENGTH('Lit') | +--------------------+---------------+ | 3 | 3 | +--------------------+---------------+
また、文字列がデータベースに保存されている場合、同じ結果が得られることがよくあります。
SELECT CHAR_LENGTH(ArtistName), LENGTH(ArtistName) FROM Artists WHERE ArtistName = 'Lit';
結果:
+-------------------------+--------------------+ | CHAR_LENGTH(ArtistName) | LENGTH(ArtistName) | +-------------------------+--------------------+ | 3 | 3 | +-------------------------+--------------------+
ただし、データベース列を変更してデータをUnicodeとして格納する場合:
ALTER TABLE Artists MODIFY COLUMN ArtistName VARCHAR(255) unicode;
次に、同じクエリを再度実行します:
SELECT CHAR_LENGTH(ArtistName), LENGTH(ArtistName) FROM Artists WHERE ArtistName = 'Lit';
別の結果が得られます:
+-------------------------+--------------------+ | CHAR_LENGTH(ArtistName) | LENGTH(ArtistName) | +-------------------------+--------------------+ | 3 | 6 | +-------------------------+--------------------+
これは、Unicodeが各文字を2バイトとして格納するためです。
これは、datalength()
の違いに似ています およびlen()
T-SQLで。
MySQLにはoctet_length()
もあります length()
の同義語である関数 。