MySQL VARCHAR型の最大サイズを教えてください。
最大サイズは約65kの行サイズによって制限されることを読みました。フィールドをに設定してみましたvarchar(20000)
が、大きすぎると表示されています。
に設定できvarchar(10000)
ます。設定できる正確な最大値はいくつですか?
MySQL VARCHAR型の最大サイズを教えてください。
最大サイズは約65kの行サイズによって制限されることを読みました。フィールドをに設定してみましたvarchar(20000)
が、大きすぎると表示されています。
に設定できvarchar(10000)
ます。設定できる正確な最大値はいくつですか?
回答:
MySQLには最大行サイズの制限があることに注意してください
MySQLテーブルの内部表現の最大行サイズ制限は65,535バイトで、BLOBおよびTEXTタイプは含まれません。BLOB列とTEXT列は、コンテンツが残りの行とは別に格納されるため、行サイズの制限に対して9〜12バイトしか貢献しません。テーブルの列数と行サイズの制限についての詳細をご覧ください。
1つの列が占有できる最大サイズは、MySQL 5.0.3の前後で異なります
VARCHAR列の値は可変長文字列です。長さに対するMySQL 5.0.3前に0から255までの値、及び0として指定することができ65,535 5.0.3以降のバージョンです。MySQL 5.0.3以降のVARCHARの有効な最大長は、最大行サイズ(すべての列で共有される65,535バイト)と使用される文字セットの影響を受けます。
ただし、utf8やutf8mb4などのマルチバイト文字セットを使用すると、制限が低くなることに注意してください。
TEXT
行サイズの制限を克服するには、型を使用してください。
4つのTEXTタイプは、TINYTEXT、TEXT、MEDIUMTEXT、LONGTEXTです。これらは4つのBLOBタイプに対応し、最大長とストレージ要件は同じです。
BLOBおよびTEXTタイプの詳細
さらに
すべてのデータタイプのストレージ要件を扱うデータタイプストレージ要件の詳細を確認してください。
あたりとして、オンラインドキュメント、64K行の制限があり、あなたが使用して行サイズをうまくすることができます:
row length = 1
+ (sum of column lengths)
+ (number of NULL columns + delete_flag + 7)/8
+ (number of variable-length columns)
列の長さはサイズの1対1のマッピングではないことに注意してください。たとえばCHAR(10) CHARACTER SET utf8
、特定のエンコーディングは文字の3バイトのプロパティを考慮する必要があるため、10文字ごとに3バイトが必要ですutf8
(これは、「実際の」UTF-8ではなく、MySQLのutf8
エンコーディングであり、最大4バイトにすることができます) )。
ただし、行のサイズが64Kに近づいている場合は、データベースのスキーマを調べることができます。これは、適切に設定された(3NF)データベースでこれほど広くする必要のあるまれなテーブルです。それは可能ですが、あまり一般的ではありません。
それ以上使用したい場合は、BLOB
またはTEXT
タイプを使用できます。これらは行の64Kの制限(小さな管理フットプリント以外)にはカウントされませんが、特定の数を超えてテキストブロック全体を使用してソートできないなど、それらの使用に起因する他の問題に注意する必要があります文字数(これは上向きに構成できます)、一時テーブルをメモリではなくディスクに強制的に配置するか、クライアントとサーバーの通信バッファーを構成してサイズを効率的に処理する必要があります。
許可されるサイズは次のとおりです。
TINYTEXT 255 (+1 byte overhead)
TEXT 64K - 1 (+2 bytes overhead)
MEDIUMTEXT 16M - 1 (+3 bytes overhead)
LONGTEXT 4G - 1 (+4 bytes overhead)
あなたはまだバイト/文字の不一致を持っています(MEDIUMTEXT utf8
列が約50万文字を「のみ」格納できるようにするため(16M-1)/3 = 5,592,405
)が、それでも範囲を大幅に拡大します。
utf8mb4
常にMySQLでエンコーディングを設定する必要があります。utf8mb4
残りの単語がutf8と呼ぶMySqlの名前です。
varcharの最大長は、MySQLの最大行サイズの影響を受けます。これは64KBです(BLOBは含まれません)。
VARCHAR(65535)ただし、マルチバイト文字セットを使用すると、制限が低くなることに注意してください。
VARCHAR(21844)CHARACTER SET utf8
CHARACTER SET utf8
例での使用は中止してください。CHARACTER SET utf8mb4
(すべての Unicodeテキストを適切に保存したい場合、そしてそれを望まない場合は)
CHARSET=utf8mb4
使用VARCHAR(16383)
。
MySQLのドキュメントから:
MySQL 5.0.3以降のVARCHARの有効な最大長は、最大行サイズ(すべての列で共有される65,535バイト)と使用される文字セットの影響を受けます。たとえば、utf8文字は1文字あたり最大3バイトを必要とする可能性があるため、utf8文字セットを使用するVARCHAR列は、最大21,844文字になるように宣言できます。
VARCHARの制限は、使用する文字セットによって異なります。ASCIIを使用すると、文字ごとに1バイトが使用されます。つまり、65,535文字を格納できます。utf8を使用すると、文字ごとに3バイトが使用され、文字数制限は21,844になります。ただし、使用する必要がある最新のマルチバイト文字セットutf8mb4を使用している場合は、絵文字やその他の特殊文字をサポートしています。1文字あたり4バイトを使用します。これにより、テーブルあたりの文字数が16,383に制限されます。INTなどの他のフィールドもこれらの制限にカウントされることに注意してください。
結論:
utf8最大21,844文字
utf8mb4最大16,383文字
Mysqlバージョン5.0.3より前のVarcharデータ型は255文字を格納できますが、5.0.3以降では65,535文字を格納できます。
ただし、最大行サイズは65,535バイトに制限されています。これは、すべての列を含めることを意味し、65,535バイトを超えてはなりません。
あなたの場合、10000を超える値を設定しようとすると、65,535を超えてしまい、mysqlがエラーを出す可能性があります。
詳細:https : //dev.mysql.com/doc/refman/5.0/en/column-count-limit.html
例のブログ:http : //goo.gl/Hli6G3