2016-09-22 12 views
1

文字エンコーディングがlatin1(1バイト文字セット)の場合、SQL以下の文はエラーなしで実行されます。MySQLのcharデータ型の最大長が正しくありません

create table chartype (chardata char(255)); 

しかし、文字エンコーディングがUTF-8(各文字に3バイト)、

create table chartype (chardata char(255)); 

ある場合は、この文はエラーをスローする必要がありますが、それはエラーなしで実行されます。 charデータ型のため 最大長は

create table chartype (chardata char(85)); 

85 * 3 = 255bytes、そうがUTF-8文字が

を設定するための最大の長さであることが唯一の文の下に許可する必要がありますエンコードUTF-8のために、255 bytesです私を明確にしてください。

+2

ドキュメントでは、charの長さは255バイトに制限されています。バイト長ではありません。 – Uueerdo

+0

それはうまく動いている、私はw3schoolでテストした、あなたも[w3Sql]を試すことができます(http://www.w3schools.com/sql/trysql.asp?filename=trysql_select_all) –

答えて

1

CHAR(255)と言うとき、255文字を収容できる固定長フィールドを作成しています。これはバイトとは異なります。 UTF-8文字は、あなたが話している文字に応じて1から4バイトまでの長さが異なりますが、MySQLのデフォルトでは3バイト長の文字しか収容できません。

すべてのUnicode文字を処理するには、utf8mb4エンコーディングを使用する必要があります。

CHARよりもVARCHARを使用してください。CHARは固定長であり、多くの無駄なスペースを作成します。

0

http://dev.mysql.com/doc/refman/5.7/en/storage-requirements.htmlは、部分的に言う:マルチバイト文字を格納するVARCHAR列について

、文字の有効な最大数は少ないです。たとえば、utf8mb3文字は1文字あたり最大3バイト必要なので、utf8mb3文字セットを使用するVARCHAR列は最大21,844文字に宣言できます。

CHARまたはTEXT、または文字セットをサポートするその他のデータ型についても同様です。

関連する問題