mysqlのVARCHARとTEXTの違いについて。
mysqlでVARCHAR
カラムを持つテーブルを作成した場合、そのカラムの長さを設定する必要があります。しかし、TEXT
型では長さを指定する必要はありません。
VARCHARと
TEXT`の違いは何ですか?
258
1
mysqlでVARCHAR
カラムを持つテーブルを作成した場合、そのカラムの長さを設定する必要があります。しかし、TEXT
型では長さを指定する必要はありません。
VARCHARと
TEXT`の違いは何ですか?
TL;DR
TEXT
c
バイトのディスクスペースを必要とする(ここでc
は格納される文字列の長さ)。varchar(m)`。
c
バイト(M
≤ 255)または2 +c
(256 ≤M
≤ 65535)バイトのディスクスペースを必要とし、c
は保存された文字列の長さです。詳細はこちら
TEXT
の最大サイズは**固定**で、2¹⁶-1 = 65535
文字です。VARCHAR
の最大サイズは
M**variable** 最大で
M = 2¹⁶-1です。 つまり、
TEXTのサイズは選べませんが、
VARCHAR`のサイズは選べます。もう一つの違いは、
TEXT
カラムにインデックス(フルテキストインデックスを除く)を付けることができないことです。そのため、カラムにインデックスを付けたい場合は、
VARCHAR
を使用する必要があります。しかし、インデックスの長さにも制限があることに注意してください。もしVARCHAR
カラムが長すぎる場合は、インデックスにVARCHAR
カラムの最初の数文字のみを使用しなければなりません (CREATE INDEX
のドキュメントを参照してください)。しかし、入力可能な文字列の最大長が
M
だけであることがわかっている場合、VARCHAR
を使用したい場合もあります。例えば、電話番号や名前などです。そうすると、TINYTEXT
やTEXT
の代わりにVARCHAR(30)
を使うことができ、誰かが電話番号カラムに3冊の指輪物語のテキストを保存しようとしても、最初の30文字だけが保存されます :)Edit: データベースに保存したいテキストが65535文字より長い場合、
MEDIUMTEXT
かLONGTEXT
を選択しなければなりませんが、注意が必要です:MEDIUMTEXTは最大16MB、
LONGTEXTは最大4GBまでの文字列を保存できます。LONGTEXT
を使用して PHP でデータを取得した場合 (少なくともstore_result
を使用せずにmysqli
を使用した場合)、メモリ割り当てエラーが発生する可能性があります。 PHP は文字列全体をバッファリングできるように 4GB のメモリを割り当てようとするためです。これは、PHP 以外の言語でも発生する可能性があります。しかし、データベースに保存する前に、必ず入力をチェックする必要があります(長すぎないか、奇妙なコードが含まれていないか)。
お知らせします:どちらのタイプでも、必要なディスク容量は保存される文字列の長さのみに依存し、最大長には依存しません。
E.g. charset latin1 を使用して、テキスト "Test" を
VARCHAR(30)
,VARCHAR(100)
,TINYTEXT
に格納すると、常に5バイト(文字列の長さを格納するために1バイト、各文字に1バイト)必要になります。同じテキストをVARCHAR(2000)
やTEXT
カラムに格納する場合も同じスペースが必要になりますが、この場合は 6 バイト (文字列の長さを格納するための 2 バイトと各文字のための 1 バイト) になります。詳しくは、ドキュメントをご覧ください。
最後に、
TEXT
とVARCHAR
はどちらも可変長のデータ型であるため、データを保存するためのスペースを最小限に抑えることができます。しかし、これはパフォーマンスとのトレードオフになります。より良いパフォーマンスが必要な場合は、CHAR
のような固定長のデータ型を使用する必要があります。これについては、ここで詳しく説明されています。