42

excerpt最大サイズ 500 文字のを格納するフィールドdescriptionと、最大サイズ 10,000 文字のを格納するフィールドの 2 つのフィールドがあります。

どのデータ型を使用する必要がありますTEXTVARCHAR? なぜ?

MySQL 5.0.3 以降、VARCHAR は最大 65000 文字を受け入れます。しかし、これでは、なぜあるタイプを使用する必要があるのか​​ わかりません。

VARCHARサイズ制限を割り当てることができるため、抜粋に使用する必要があり、フィールドが大きいTEXTため、フィールドに使用する必要があると考えています。description

4

3 に答える 3

29

longは、の/フィールドVARCHARと同じ方法で格納されます(トランザクション性、参照整合性、およびクラッシュリカバリに使用していると思いますか?)-つまり、ディスク上の残りのテーブルの外部に格納されます(これには必要な場合があります)別のディスクを読み取って取得します)。TEXTBLOBInnoDB

ストレージの見込みのあるBLOBから、TEXTとlongVARCHARはInnodbによって同じ方法で処理されます。これが、InnodbのマニュアルでBLOBではなく「長い列」と呼ばれる理由です。

ソース

これらの列にインデックスを付ける必要がない限り(この場合ははるかに高速です)、長いフィールドに使用するVARCHAR理由はありません-長さに応じてデータ取得を調整するためにエンジン固有の最適化がいくつかあり、正しい列タイプを使用する必要がありますこれらを利用するために。VARCHARTEXTMySQL

MyISAMトピックに関する詳細なディスカッションを使用している場合は、ここにあります。

于 2011-06-19T19:41:23.763 に答える
9

VARCHARとの違いの 1 つは、列に対しては句をTEXT宣言できますが、列に対しては宣言できないことです。DEFAULTVARCHARTEXT

@Andyは、InnoDBが と の両方VARCHARTEXT内部的に同じ方法で保存することは正しいです。

FULLTEXTインデックスは と の両方VARCHARでサポートされていますTEXT。5.6 より前では、MyISAM を使用してそのタイプのインデックスを取得する必要があります。MySQL 5.6 では、ついにFULLTEXTInnoDB でサポートされました。ただし、MyISAM での実装とは異なる結果を返すように見えるため、慎重にテストする必要があります。

ただし、Sphinx Searchは、MySQL でのいずれの実装よりも高速で豊富な機能を備えています。Full-Text Search Throwdownで私の概要を参照してください。

@モハメッドは尋ねました:

いつVARCHAR考慮されLONG VARCHARますか?文字のしきい値はありますか?

最大 255 バイトの長さを宣言すると、指定された文字列の長さを 1 バイトでエンコードできます。255 バイトを超える列の最大長を宣言すると、2 バイトを使用して長さがエンコードされます。

列を として宣言できますがLONG VARCHAR、これは実際にはMEDIUMTEXTの単なるエイリアスです。

mysql> create table test ( l long varchar);

mysql> show create table test\G

CREATE TABLE `test` (
  `l` mediumtext
) ENGINE=InnoDB DEFAULT CHARSET=latin1
于 2014-02-25T12:48:00.813 に答える
5

コンテンツが varchar 列に収まる場合は、varchar を使用してください。

Varchar データは各行に格納されます。テキスト データは、テーブルの外部に BLOB として格納されます。

このテストによると、varchar は text よりも約 3 倍高速です。

于 2011-06-19T19:32:59.020 に答える