可変長の文字データがあり、それを 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
しかできませんでした。TEXTPTR
READTEXT
WRITETEXT
SQL Server 2005では、列に直接アクセスできます(ただし、列に値を割り当てるにTEXT
は明示的なキャストが必要です)。VARCHAR
TEXT
いいね:
- データベースに大きなテキストを保存する必要がある場合
- 列の値を検索しない場合
- この列をめったに選択せず、結合も行わない場合。
VARCHAR
いいね:
- 小さな文字列を保存する場合
- 文字列値を検索する場合
- 常に選択するか、結合で使用する場合。
ここで選択するということは、列の値を返すクエリを発行することを意味します。
ここでの検索とは、結果がTEXT
or列の値に依存するクエリを発行することを意味します。これには、任意のor条件VARCHAR
での使用も含まれます。JOIN
WHERE
TEXT
は行外に格納されるため、TEXT
列を含まないクエリの方が通常は高速になります。
適している例をいくつか挙げTEXT
ます。
- ブログコメント
- ウィキページ
- コードソース
適している例をいくつか挙げVARCHAR
ます。
- ユーザー名
- ページタイトル
- ファイル名
経験則として、テキスト値が200文字を超える必要があり、この列で結合を使用しない場合は、 を使用しますTEXT
。
それ以外の場合は を使用しますVARCHAR
。
PS同じことがUNICODE
enabledにも適用され、上記の例で使用する必要がありますNTEXT
。NVARCHAR
PPS同じことが、 SQL Server 2005+がおよびの代わりに使用するVARCHAR(MAX)
およびにも当てはまります。これらを常に行外に格納したい場合は、で有効にする必要があります。NVARCHAR(MAX)
TEXT
NTEXT
large value types out of row
sp_tableoption
前述の通り、ここは、TEXT
将来のリリースでは非推奨になる予定です。
このオプションは、SQL Server
text in row
の将来のバージョンでは削除される予定です。新しい開発作業ではこのオプションの使用を避け、現在 を使用しているアプリケーションは修正するようにしてください。大きなデータは、 、、またはデータ型を使用して保存することをお勧めします。これらのデータ型の行内および行外の動作を制御するには、オプションを使用します。text in row
varchar(max)
nvarchar(max)
varbinary(max)
large value types out of row