2009-11-14 3 views
155

length()char_length()の主な違いは何ですか?MySQLの長さ()とchar_length()

私はバイナリやバイナリ以外の文字列と関係があると思います。文字列をバイナリとして格納する実用的な理由はありますか?

mysql> select length('MySQL'), char_length('MySQL'); 
+-----------------+----------------------+ 
| length('MySQL') | char_length('MySQL') | 
+-----------------+----------------------+ 
|    5 |     5 | 
+-----------------+----------------------+ 
1 row in set (0.01 sec) 
+0

はい、バイナリ文字列が実際にバイナリ文字列である場合、バイナリ文字列を格納する実際的な理由があります。圧縮される。 – sanmai

答えて

257

LENGTH()バイトで測定文字列の長さを返します。
CHAR_LENGTH()は、文字
で測定された文字列の長さを返します。

これは、ほとんどの文字が2バイトでエンコードされているUnicodeに特に関係します。またはバイト数が異なるUTF-8。例:あなたが見ることができるように

select length(_utf8 '€'), char_length(_utf8 '€') 
--> 3, 1 

ユーロ記号は、それが唯一の文字だにもかかわらず、(それがUTF-8で0xE282ACとしてエンコードされます)3つのバイトを占めます。

+3

UCS-2のみが1文字につき2バイトでエンコードされます。このエンコーディング(またはより正確にはUTF-16LE)は、Windowsが誤って「Unicode」と呼ぶものです。 MySQLはUTF-16をサポートしていません。 UTF-8を使用するのが普通の方法です。 – bobince

+2

例:select length( '日本語')、char_length( '日本語'); – sanmai

+1

yesh! –

9

varchar(10)には10文字以上の10文字が格納されます。 インデックスでは、フィールドの最大長を割り当てます。したがって、UTF8-mb4を使用している場合は、10文字のフィールドに40バイトを割り当てます。

関連する問題