MySQLにおけるVARCHARとTEXTの違い [重複] 質問する

MySQLにおけるVARCHARとTEXTの違い [重複] 質問する

MySQL で列を含むテーブルを作成するときはVARCHAR、その長さを設定する必要があります。ただし、TEXT型の場合は長さを指定する必要はありません。

VARCHARとの違いは何ですかTEXT?

ベストアンサー1

要約

TEXT

  • 最大サイズは 65535 文字に固定されています (最大サイズを制限することはできません)
  • 2 +cバイトのディスク領域を占有します。ここで、はc保存される文字列の長さです。
  • インデックスの一部に(完全に)することはできません。プレフィックスの長さを指定する必要があります。

VARCHAR(M)

  • M文字の最大サイズは可変
  • M1から65535までの範囲でなければなりません
  • 1 +cバイト(M≤ 255の場合)または2 +バイトc(256 ≤ M≤ 65535の場合)のディスク容量を必要とします。ここで、はc格納される文字列の長さです。
  • インデックスの一部になることができる

詳細情報

TEXTの最大文字数は固定です2¹⁶-1 = 65535。の最大文字数はまで可変
VARCHARです。したがって のサイズを選択することはできませんが、のサイズは選択できます。M M = 2¹⁶-1
TEXTVARCHAR

もう一つの違いは、列にインデックス(フルテキストインデックスを除く)を配置できないことですTEXT
列にインデックスを配置したい場合は、 を使用する必要がありますVARCHAR。ただし、インデックスの長さにも制限があるため、VARCHAR列が長すぎる場合は、列の最初の数文字のみをインデックスに使用する必要がありますVARCHAR(のドキュメントを参照してください)。CREATE INDEX)。

しかし、電話番号や名前など、VARCHAR入力可能な文字列の最大長が だけであることがわかっている場合は、も使用する必要があります。その場合は、またはの代わりにを使用できます。また、誰かが「ロード オブ ザ リング」の 3 冊すべてのテキストを電話番号の列に保存しようとしても、最初の 30 文字のみが保存されます :)MVARCHAR(30)TINYTEXTTEXT

編集:データベースに保存するテキストが 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。詳細については、ここ

おすすめ記事