TEXT 大きな文字列データに使用されます。フィールドの長さが特定のしきい値を超えた場合、テキストは行外に格納されます。
VARCHAR 常に行に格納され、 8000の制限があります 文字。 VARCHAR(x)を作成しようとした場合 、ここで x> 8000 、エラーが発生します:
サーバー:メッセージ131、レベル15、状態3、行1
タイプ「varchar」に指定されたサイズ()は、任意のデータタイプで許可されている最大値(8000)を超えています
これらの長さの制限は、VARCHAR(MAX)には関係ありません。 SQL Server 2005 、TEXTのように、行外に格納される場合があります 。
MAXに注意してください ここでは一種の定数ではありません、VARCHAR およびVARCHAR(MAX) 非常に異なるタイプであり、後者はTEXTに非常に近いです 。
以前のバージョンのSQLServer TEXTにアクセスできませんでした 直接、TEXTPTRしか取得できませんでした READTEXTで使用します およびWRITETEXT 関数。
SQL Server 2005 TEXTに直接アクセスできます 列(ただし、VARCHARへの明示的なキャストが必要です。 それらに値を割り当てるため)。
TEXT 良いです:
- データベースに大きなテキストを保存する必要がある場合
- 列の値を検索しない場合
- この列をめったに選択せず、参加しない場合。
VARCHAR 良いです:
- 小さな文字列を保存する場合
- 文字列値で検索する場合
- 常に選択するか、結合で使用する場合。
選択 ここでは、列の値を返すクエリを発行することを意味します。
検索 ここでは、結果がTEXTの値に依存するクエリを発行することを意味します またはVARCHAR 桁。これには、任意のJOINでの使用が含まれます またはWHERE 状態。
TEXTとして TEXTを含まないクエリは行外に格納されます 通常、列の方が高速です。
TEXTの例 に適しています:
- ブログのコメント
- Wikiページ
- コードソース
VARCHARの例 に適しています:
- ユーザー名
- ページタイトル
- ファイル名
経験則として、テキスト値が 200を超える必要がある場合 文字および この列では結合を使用せず、TEXTを使用してください 。
それ以外の場合は、VARCHARを使用します 。
P.S. 同じことがUNICODEにも当てはまります 有効なNTEXT およびNVARCHAR 上記の例にも使用する必要があります。
P.P.S。 同じことがVARCHAR(MAX)にも当てはまります およびNVARCHAR(MAX) そのSQLServer 2005+ TEXTの代わりに使用 およびNTEXT 。 large value types out of rowを有効にする必要があります sp_tableoptionでそれらのために それらを常に行外に保存したい場合。
上記のように、ここ 、TEXT 将来のリリースでは廃止される予定です:
text in rowオプションは、 SQL Serverの将来のバージョンで削除される予定です。 。新しい開発作業でこのオプションを使用することは避け、現在text in rowを使用しているアプリケーションを変更することを計画してください。 。varchar(max)を使用して大きなデータを保存することをお勧めします 、nvarchar(max)、またはvarbinary(max)データ型。これらのデータ型の行内および行外の動作を制御するには、large value types out of rowを使用します オプション。