MySQL で列を含むテーブルを作成するときはVARCHAR
、その長さを設定する必要があります。ただし、TEXT
型の場合は長さを指定する必要はありません。
VARCHAR
との違いは何ですかTEXT
?
ベストアンサー1
要約
TEXT
- 最大サイズは 65535 文字に固定されています (最大サイズを制限することはできません)
- 2 +
c
バイトのディスク領域を占有します。ここで、はc
保存される文字列の長さです。 - インデックスの一部に(完全に)することはできません。プレフィックスの長さを指定する必要があります。
VARCHAR(M)
M
文字の最大サイズは可変M
1から65535までの範囲でなければなりません- 1 +
c
バイト(M
≤ 255の場合)または2 +バイトc
(256 ≤M
≤ 65535の場合)のディスク容量を必要とします。ここで、はc
格納される文字列の長さです。 - インデックスの一部になることができる
詳細情報
TEXT
の最大文字数は固定です2¹⁶-1 = 65535
。の最大文字数はまで可変
VARCHAR
です。したがって のサイズを選択することはできませんが、のサイズは選択できます。M
M = 2¹⁶-1
TEXT
VARCHAR
もう一つの違いは、列にインデックス(フルテキストインデックスを除く)を配置できないことですTEXT
。
列にインデックスを配置したい場合は、 を使用する必要がありますVARCHAR
。ただし、インデックスの長さにも制限があるため、VARCHAR
列が長すぎる場合は、列の最初の数文字のみをインデックスに使用する必要がありますVARCHAR
(のドキュメントを参照してください)。CREATE INDEX
)。
しかし、電話番号や名前など、VARCHAR
入力可能な文字列の最大長が だけであることがわかっている場合は、も使用する必要があります。その場合は、またはの代わりにを使用できます。また、誰かが「ロード オブ ザ リング」の 3 冊すべてのテキストを電話番号の列に保存しようとしても、最初の 30 文字のみが保存されます :)M
VARCHAR(30)
TINYTEXT
TEXT
編集:データベースに保存するテキストが 65535 文字より長い場合は、MEDIUMTEXT
または を選択する必要がありますLONGTEXT
が、注意が必要です。MEDIUMTEXT
は最大 16 MB、LONGTEXT
最大 4 GB の文字列を保存します。 を使用してLONGTEXT
データを PHP 経由で取得する場合 (少なくとも を使用mysqli
せずにを使用する場合store_result
)、PHP は文字列全体をバッファリングできるように 4 GB のメモリを割り当てようとするため、メモリ割り当てエラーが発生する可能性があります。これは、PHP 以外の言語でも発生する可能性があります。
ただし、データベースに保存する前に、入力内容を必ず確認する必要があります (入力が長すぎませんか? 奇妙なコードが含まれていますか?) 。
注意: どちらのタイプでも、必要なディスク容量は、保存される文字列の長さのみによって決まり、最大長には依存しません。
たとえば、文字セット latin1 を使用して、テキスト「Test」をVARCHAR(30)
、VARCHAR(100)
、に保存する場合TINYTEXT
、常に 5 バイト (文字列の長さを保存するために 1 バイト、各文字に 1 バイト) が必要です。同じテキストを またはVARCHAR(2000)
列に保存する場合TEXT
も、同じ容量が必要ですが、この場合は 6 バイト (文字列の長さを保存するために 2 バイト、各文字に 1 バイト) になります。
詳細については、ドキュメンテーション。
TEXT
最後に、 とはどちらも可変長データ型なので、データを格納するために必要なスペースを最小限に抑えられる可能性が高いことに注意してくださいVARCHAR
。ただし、これにはパフォーマンスとのトレードオフがあります。パフォーマンスを向上させる必要がある場合は、 のような固定長型を使用する必要がありますCHAR
。詳細については、ここ。