300

可変長の文字データがあり、SQL Server (2005) データベースに保存したいと考えています。TEXT SQL タイプの選択方法または VARCHAR SQL タイプの選択方法、パフォーマンス/フットプリント/機能の長所と短所について、いくつかのベスト プラクティスを学びたいと考えています。

4

4 に答える 4

292

TEXT大きな文字列データに使用されます。フィールドの長さが特定のしきい値を超えると、テキストは行外に格納されます。

VARCHARは常に行に格納され、8000文字の制限があります。x > 8000VARCHAR(x)のを作成しようとすると、次のエラーが発生します。

サーバー: メッセージ 131、レベル 15、状態 3、行 1

型 'varchar' に指定されたサイズ () が、データ型に許可されている最大値 (8000) を超えています

これらの長さの制限はVARCHAR(MAX)SQL Server 2005では関係ありません。SQL Server 2005 は、TEXT.

はここでMAXは一種の定数ではなく、非常に異なる型であり、後者は に非常に近いことに注意してください。VARCHARVARCHAR(MAX)TEXT

以前のバージョンのSQL Server ではTEXT、 に直接アクセスできず、 を取得しておよび関数TEXTPTRで使用することしかできませんでした。READTEXTWRITETEXT

SQL Server 2005 では、列に直接アクセスできます (ただし、列に値を割り当てるにTEXTは明示的なキャストが必要です)。VARCHAR

TEXTいいね:

  • データベースに大きなテキストを保存する必要がある場合
  • 列の値を検索しない場合
  • この列をめったに選択せず、それに参加しない場合。

VARCHARいいね:

  • 小さな紐を収納するなら
  • 文字列値を検索する場合
  • 常に選択するか、結合で使用する場合。

ここで選択するということは、列の値を返すクエリを発行することを意味します。

ここで検索TEXTするとは、結果がorVARCHAR列の値に依存するクエリを発行することを意味します。これには、任意JOINまたはWHERE条件での使用が含まれます。

は行の外に格納されるため、通常、列をTEXT含まないクエリの方が高速です。TEXT

TEXTが良いかのいくつかの例:

  • ブログのコメント
  • ウィキページ
  • コードソース

VARCHARが良いかのいくつかの例:

  • ユーザー名
  • ページタイトル
  • ファイル名

経験則として、テキスト値が200文字を超える必要があり、かつこの列で結合を使用しない場合は、TEXT.

それ以外の場合は を使用しますVARCHAR

PS同じことがUNICODE有効NTEXTにも適用されNVARCHAR、上記の例で使用する必要があります。

PPS SQL Server 2005+がandの代わりに使用するVARCHAR(MAX)andNVARCHAR(MAX)にも同じことが当てはまります。それらを常に行の外に保存したい場合は、それらを有効にする必要があります。TEXTNTEXTlarge value types out of rowsp_tableoption

上記およびこちらで述べたように、TEXTは将来のリリースで廃止される予定です。

このオプションは、 SQL Servertext in rowの将来のバージョンでは削除される予定です。新しい開発作業でこのオプションを使用することは避け、現在使用しているアプリケーションを変更することを計画してください。、、またはデータ型を使用して大きなデータを格納することをお勧めします。これらのデータ型の行内および行外の動作を制御するには、オプションを使用します。text in rowvarchar(max)nvarchar(max)varbinary(max)large value types out of row

于 2009-02-19T11:07:59.037 に答える
228

SQL Server 2005 以降を使用している場合は、varchar(MAX). このtextデータ型は非推奨であり、新しい開発作業には使用しないでください。ドキュメントから:

重要

ntexttext、およびimageデータ型は、Microsoft SQL Server の将来のバージョンで削除される予定です。新しい開発作業でこれらのデータ型を使用することは避け、現在それらを使用しているアプリケーションを変更することを計画してください。代わりにnvarchar(max)varchar(max)、およびvarbinary(max)を使用してください。

于 2009-02-19T11:13:03.783 に答える
46

SQL Server 2005 では、新しいデータ型が導入されました:varchar(max)およびnvarchar(max) 古いテキスト型の利点があります: 2GB までのデータを格納できますが、varcharおよびのほとんどの利点も備えていnvarcharます。これらの利点の中には、substring() などの文字列操作関数を使用できる機能があります。

また、varchar(max) は、サイズが 8Kb 未満の間、テーブルの (ディスク/メモリ) スペースに格納されます。フィールドにさらにデータを配置する場合にのみ、テーブルのスペースから格納されます。テーブルのスペースに格納されたデータは、(通常) より迅速に取得されます。

要するに、(n)varchar(max) というより良い代替手段があるため、決して Text を使用しないでください。varchar(max) は、通常の varchar では十分な大きさでない場合、つまり、格納する文字列が 8000 文字を超えると予想される場合にのみ使用してください。

前述のように、TEXT データ型で SUBSTRING を使用できますが、TEXT フィールドに含まれる文字が 8000 文字未満である場合に限られます。

于 2009-02-19T11:18:48.403 に答える
7

ms 2008 には大きな変更がいくつかあります -> 使用するデータ型を決定する際には、次の記事を検討する価値があるかもしれません。 http://msdn.microsoft.com/en-us/library/ms143432.aspx

バイトあたり

  1. varchar(max)、varbinary(max)、xml、text、または image 列 2^31-1 2^31-1
  2. nvarchar(最大) 列 2^30-1 2^30-1
于 2010-06-25T15:14:19.490 に答える