1. ホーム
  2. mysql

[解決済み] MySQLのVARCHARとTEXTの違い【重複】について

2022-03-23 23:48:54

質問

MySQLでテーブルを作成する際に VARCHAR カラムの長さを設定する必要があります。しかし TEXT 型の場合、長さを指定する必要はありません。

とはどのような違いがあるのでしょうか? VARCHARTEXT ?

解決方法は?

TL;DR

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 のみであることが分かっている場合、入力文字列の最大長は M 例えば、電話番号や名前など、このようなものです。そうすると VARCHAR(30) の代わりに TINYTEXT または TEXT そして、もし誰かが3冊の指輪物語を電話番号の欄に保存しようとしたら、最初の30文字しか保存されません :)

編集してください。 データベースに保存したいテキストが65535文字より長い場合は MEDIUMTEXT または LONGTEXT が、注意してください。 MEDIUMTEXT は16MBまでの文字列を保存します。 LONGTEXT は4GBまで。もし LONGTEXT で、PHP経由でデータを取得する場合(少なくとも mysqli を使わずに store_result なぜなら、PHP は文字列全体をバッファリングできるように 4GB のメモリを確保しようとするからです。これは、PHP 以外の言語でも発生する可能性があります。

しかし 常に 入力内容を確認する (長すぎないか?変なコードが含まれていないか?) 前に データベースに格納する。

お知らせ どちらのタイプでも、必要なディスク容量は保存される文字列の長さのみに依存し、最大長には依存しない。
charset latin1 を使用し、テキスト "Test"を VARCHAR(30) , VARCHAR(100)TINYTEXT の場合、常に5バイト(文字列の長さを格納するための1バイトと各文字のための1バイト)を必要とします。もし、同じテキストを VARCHAR(2000) または TEXT 列の場合も同じスペースが必要ですが、この場合は6バイト(文字列長を格納するための2バイトと各文字のための1バイト)になります。

より詳細な情報は ドキュメント .

最後に、どちらも注意事項を付け加えておきます。 TEXTVARCHAR は可変長データ型であるため、データを保存するためのスペースを最小限に抑えられる可能性が高い。しかし、これは性能とのトレードオフになる。よりよいパフォーマンスが必要な場合は CHAR . 詳しくはこちら こちら .