最大サイズがMySQL VARCHAR型のものであることを知りたいのですが。
最大サイズは約65kの行サイズによって制限されることを読みました。フィールドをvarchar(20000)
に設定しようとしましたが、それは大きすぎるということです。
私はそれをvarchar(10000)
に設定することができます。設定できる正確な最大値はいくつですか。
MySQLには最大行サイズ制限があることに注意してください
MySQLテーブルの内部表現は、最大65,535バイトの行サイズ制限を持ち、BLOBとTEXTタイプを数えません。 BLOB列とTEXT列の内容は、残りの行とは別に格納されているため、行サイズの制限に対して9〜12バイトしか寄与しません。 テーブルの列数と行サイズの制限についての詳細を読んでください。
単一列が占有できる最大サイズ。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のマッピングではないことに注意してください。たとえば、CHAR(10) CHARACTER SET utf8
では、10文字ごとに3バイトが必要です。これは、特定のエンコードがutf8
の1文字あたり3バイトのプロパティを考慮する必要があるためです(つまり、 MySQLのutf8
encoding 「実際の」UTF-8(最大4バイト)ではなく)。
ただし、行サイズが64Kに近づいている場合は、データベースのスキーマを調べてください。適切に設定された(3NF)データベースではそれほど広くする必要があるまれなテーブルです。possible、はあまり一般的ではありません。
それ以上使用したい場合は、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 文字
mEDIUMBLOB/LONGBLOBまたはMEDIUMTEXT/LONGTEXTも使用できます。
これより多くのデータを格納しようとすると、MySQLのBLOB型は最大65,534バイトまで格納できます。MySQLはデータを切り捨てます。 MEDIUMBLOBは最大16,777,213バイトまで格納でき、LONGBLOBは最大4,294,967,292バイトまで格納できます。
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