MySQL VARCHARの最大サイズとは何ですか?


300

MySQL VARCHAR型の最大サイズを教えてください。

最大サイズは約65kの行サイズによって制限されることを読みました。フィールドをに設定してみましたvarchar(20000)が、大きすぎると表示されています。

に設定できvarchar(10000)ます。設定できる正確な最大値はいくつですか?


1
詳細ブログ:goo.gl/Hli6G3
Suresh Kamrushi 2016年

回答:


293

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タイプの詳細

さらに

すべてのデータタイプのストレージ要件を扱うデータタイプストレージ要件の詳細を確認してください。


4
「長い」文字列とは何ですか?
リチャードH

6
私はTEXT列を避けようとしますが、存在してソートすると一時テーブルが作成される可能性があるためです
Robert Swisher

1
名にvarchar(200)を使用していて、このフィールドに6文字しか格納していない場合、何バイトの名が占有されますか?
Paresh Gami

2
@PareshGami-6 + 1 = 7文字!CHARとは対照的に、VARCHAR値は、1バイトまたは2バイトの長さのプレフィックスとデータとして格納されます。もっと...
rajukoyilandy

58

あたりとして、オンラインドキュメント、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)が、それでも範囲を大幅に拡大します。


4
TEXT型はメモリテーブルに格納できないため、VARCHARで十分な場合に使用すると、パフォーマンスが大幅に低下することに注意してください。
カムデンS.

MySql utf8の「utf8の文字ごとの3バイトのプロパティ」。これは実際にはutf8ではありません。実際には最大。utf-8文字のバイト4です。このためutf8mb4常にMySQLでエンコーディングを設定する必要がありますutf8mb4残りの単語がutf8と呼ぶMySqlの名前です。
Stijn de Witt

1
@StijndeWitt、そのおかげで。UTF-8ではなくMySQLのutf8エンコーディング方式を意味していることを示すために明確になりました。私は通常、大文字のバリアントを使用して「実際の」UTF-8を示します。これは、IANAの慣例として受け入れられているためです。
paxdiablo

41

ソース

varcharの最大長は、MySQLの最大行サイズの影響を受けます。これは64KBです(BLOBは含まれません)。

VARCHAR(65535)ただし、マルチバイト文字セットを使用すると、制限が低くなることに注意してください。

VARCHAR(21844)CHARACTER SET utf8


20
CHARACTER SET utf8例での使用は中止してください。CHARACTER SET utf8mb4すべての Unicodeテキストを適切に保存したい場合、そしてそれを望まない場合は)
Stijn de Witt

4
以下のためのCHARSET=utf8mb4使用VARCHAR(16383)
Wil Moore III

3
utf8mb4を使用すると、utf8がそうではない状況で、インデックス幅の制限に対抗します。utf8mb4には含まれているがutf8には含まれていない文字セットを調べると、さまざまな形の象形文字やその他の難解な文字セットをすべて含めても、パフォーマンスが大幅に低下することはありません(経験的に判断)。それはStijnが意味するほどカットされ、乾燥されていません。
kcrossen 2017

多くの絵文字はutf8mb4にも存在し、utf8にはないため、価値があるかどうかの方程式が変わる可能性があります。
ブライアンモレティー

23

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文字


6

MEDIUMBLOB / LONGBLOBまたはMEDIUMTEXT / LONGTEXTも使用できます

MySQLのBLOBタイプは最大65,534バイトを格納できます。これより多くのデータを格納しようとすると、MySQLはデータを切り捨てます。MEDIUMBLOBは最大16,777,213バイトを格納でき、LONGBLOBは最大4,294,967,292バイトを格納できます。


3

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


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.