短い答え: 実用的、パフォーマンス、ストレージの違いはありません。
長い答え:
VARCHAR(3000)
(またはその他の大きな制限)との間には本質的に(MySQLでは)違いはありませんTEXT
。前者は3000 文字で切り捨てられます。後者は65535 バイトで切り捨てられます。(文字は複数バイトを取る可能性があるため、バイトと文字を区別しています。)
の制限が小さい場合、VARCHAR
に比べていくつかの利点がありTEXT
ます。
- 「小さい」とは、バージョン、コンテキストなどに応じて、191、255、512、767、または3072などを意味します
CHARACTER SET
。
INDEXes
列にインデックスを付けることができる大きさには制限があります。(767または3072 バイト。これはバージョンと設定に依存します)
- 複合によって作成された中間テーブル
SELECTs
MEMORY(高速)またはMyISAM(低速)の2つの異なる方法で処理されます。「大きな」カラムが含まれる場合、遅い方の手法が自動的に選択されます。(バージョン8.0で大幅な変更が行われるため、この箇条書き項目は変更される可能性があります。)
- 前の項目に関連して、
TEXT
(とは対照的にVARCHAR
)すべてのデータ型はMyISAMに直接ジャンプします。つまりTINYTEXT
、生成された一時テーブルのほうが、同等のものよりも自動的に低下しVARCHAR
ます。(しかし、これは議論を第三の方向に導きます!)
VARBINARY
のようなものVARCHAR
です。BLOB
のようTEXT
です。
他の回答への反論
元の質問では、1つのこと(どのデータ型を使用するか)が尋ねられました。受け入れられた回答は他の何かに答えました(オフレコストレージ)。その答えは古くなっています。
このスレッドが開始されて応答されたとき、InnoDBには2つの「行フォーマット」しかありませんでした。その後すぐに、さらに2つの形式(DYNAMIC
およびCOMPRESSED
)が導入されました。
の保存場所はTEXT
、データ型の名前ではなく、サイズにVARCHAR()
基づいています。以下のために更新され、大きなテキスト/ BLOBカラムのオン/オフレコードストレージの議論を参照してくださいこれを。