MySQL VARCHAR 型の最大サイズを知りたいです。
最大サイズは約65kの行サイズによって制限されていることを読みました。フィールドを に設定しようとしましvarchar(20000)
たが、大きすぎると表示されます。
に設定できましたvarchar(10000)
。設定できる正確な最大値はいくつですか?
MySQLには最大行サイズ制限があることに注意してください
MySQLテーブルの内部表現には、BLOBおよびTEXTタイプを除いて、65,535バイトの最大行サイズ制限があります。BLOB列とTEXT列は、その内容が行の残りの部分とは別に格納されるため、行サイズの制限に対して9〜12バイトしか寄与しません。テーブルの列数と行サイズの制限についての詳細をお読みください。
1つの列が占めることができる最大サイズは、MySQL5.0.3の前後で異なります
VARCHAR列の値は可変長の文字列です。長さは、MySQL 5.0.3以前は0〜255、5.0.3以降のバージョンでは0〜65,535の値として指定できます。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のマッピングではないことに注意する必要があります。たとえば、特定のエンコーディングでは、 (最大4バイトの「実際の」UTF-8ではなくMySQLのエンコーディングCHAR(10) CHARACTER SET utf8
である)の1文字あたり3バイトのプロパティを考慮する必要があるため、10文字ごとに3バイトが必要です。)。utf8
utf8
ただし、行サイズが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
)、それでも範囲が大幅に拡大します。
varchar の最大長は、MySQL の最大行サイズの影響を受けます。これは 64KB です (BLOB はカウントされません)。
VARCHAR(65535) ただし、マルチバイト文字セットを使用する場合は制限が低くなることに注意してください。
VARCHAR(21844) 文字セット utf8
MySQL のドキュメントから:
MySQL 5.0.3 以降での VARCHAR の有効な最大長は、最大行サイズ (すべての列で共有される 65,535 バイト) と使用される文字セットの影響を受けます。たとえば、utf8 文字には 1 文字あたり最大 3 バイトが必要な場合があるため、utf8 文字セットを使用する VARCHAR 列は最大 21,844 文字であると宣言できます。
VARCHAR の制限は、使用する文字セットによって異なります。ASCII を使用すると、1 文字あたり 1 バイトが使用されます。つまり、65,535 文字を格納できます。utf8 を使用すると、1 文字あたり 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
MEDIUMBLOB/LONGBLOB または MEDIUMTEXT/LONGTEXT も使用できます
MySQL の BLOB 型は最大 65,534 バイトを格納できます。これを超えるデータを格納しようとすると、MySQL はデータを切り捨てます。MEDIUMBLOB は最大 16,777,213 バイト、LONGBLOB は最大 4,294,967,292 バイトを格納できます。
64KB に制限されていないTEXT
typeを使用できます。