SQL Server のテキスト型とvarcharデータ型 [closed] 質問する

SQL Server のテキスト型とvarcharデータ型 [closed] 質問する

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

ベストアンサー1

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

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

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

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

これらの長さの制限は、 と同様に行外に格納される可能性があるSQL Server 2005VARCHAR(MAX)では関係ありません。TEXT

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

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

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

TEXTいいね:

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

VARCHARいいね:

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

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

ここでの検索とは、結果がTEXTor列の値に依存するクエリを発行することを意味します。これには、任意のor条件VARCHARでの使用も含まれます。JOINWHERE

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

適している例をいくつか挙げTEXTます。

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

適している例をいくつか挙げVARCHARます。

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

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

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

PS同じことがUNICODEenabledにも適用され、上記の例で使用する必要がありますNTEXTNVARCHAR

PPS同じことが、 SQL Server 2005+がおよびの代わりに使用するVARCHAR(MAX)およびにも当てはまります。これらを常に行外に格納したい場合は、で有効にする必要があります。NVARCHAR(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

おすすめ記事