SQL Serverテキスト型とvarcharデータ型[終了]


287

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


17
Googleからここに送られた場合:MSDN SQLデータ型のページが役立つ場合があります。
Jeroen

回答:


212

SQL Server 2005以降を使用してvarchar(MAX)いる場合は、を使用します。textデータ型が廃止されており、新規の開発作業のために使用すべきではありません。ドキュメントから:

重要

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


3
Mladen氏に感謝します。TEXTが非推奨になっていることに驚いています。これについて言及している公式文書はありますか?
ジョージ

1
これは「公式」ではありませんが、基本をカバーしています。テキストは実際には減価償却されており、検索やインデックス作成など、varchar(max)が実行する機能もすべてサポートしていません。blog.sqlauthority.com/2007/05/26/...
achinda99

32
それはなるにつれて、これはoffcialようです:) msdn.microsoft.com/en-us/library/ms187993.aspx
ムラデンPrajdic

1
クールなachinda99とMladen Prajdic!あなたが提供したものは私が探しているものです。:-)もう1つの質問です。さまざまな状況でVARCHARまたはVARCHAR(MAX)を使用するかどうかをどのように選択するのですか?
George2、2009

1
それに関する公式のMS情報は廃止されました:msdn.microsoft.com/en-us/library/ms187993%28v=sql.90%29.aspx
Fanda

283

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

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

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

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

これらの長さの制限は心配しないVARCHAR(MAX)SQL Server 2005のと同じように、行外に格納することができます、TEXT

MAXここでは、一定の種類のものです、VARCHARそしてVARCHAR(MAX)、後者は非常に近くに非常に異なるタイプがありますTEXT

以前のバージョンのSQL ServerではTEXT直接にアクセスできず、を取得TEXTPTRREADTEXTWRITETEXT関数内でのみ使用できました。

SQL Server 2005のことができます直接アクセスTEXT列(あなたはまだして明示的なキャストが必要なもののVARCHAR、彼らのために値を代入します)。

TEXT いいね:

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

VARCHAR いいね:

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

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

検索ここで私は、その結果の値に依存して任意のクエリの発行を意味するTEXTか、VARCHAR列を。これには、任意のJOINor WHERE条件での使用が含まれます。

ようにTEXT行の外格納され、関与しないクエリTEXTの列は、通常より高速です。

TEXTが良いのかの例:

  • ブログのコメント
  • Wikiページ
  • コードソース

VARCHARが良いのかの例:

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

経験則として、あなたは今まで超えることがあなたにテキスト値が必要な場合は、200個の文字を、この列に加わる使用は使用しないでくださいTEXT

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

PS同じことがUNICODE有効NTEXTにさNVARCHARれている場合にも当てはまります。上記の例で使用する必要があります。

PPS同じことが適用されるにVARCHAR(MAX)してNVARCHAR(MAX)いることをSQL Serverの2005+の使用の代わりに、TEXTNTEXT。それらを常に行外に格納する場合は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


2
1.「列の値を検索しない場合」-「検索」の意味を教えてください。この列を選択する、この列を注文する、この列のように、またはこの列で文字列操作関数を使用するということですか?
George2、2009

2
2.「VARCHARは常に行に格納され、8000文字の制限があります。」申し訳ありませんが、同意しません。VARCHARは8000より長くなる可能性があり、8000を超える場合、VARCHARは列以外に格納されます。コメントは?
ジョージ

1
3.このスレッドで言及されているMladen PrajdicのTEXTタイプは非推奨ですが、これをカバーするドキュメントは見つかりません。これをカバーするドキュメントはありますか?
ジョージ

2
クールなカズノイ!あなたはとても知識豊富です!:-)もう1つの質問-「もちろん、これはVARCHAR(MAX)には関係ありません。これは、SQL SERVER 2005の場合、TEXTの同義語です。」「これ」ってどういう意味?
George2、2009

「もちろん、これはVARCHAR(MAX)には関係しません。VARCHAR(MAX)は、SQL SERVER 2005の場合、TEXTの同義語です。」-TEXTがSQL Server 2005のVARCHARと同じであるというドキュメントはありますか?いくつか検索しましたが、公式文書は見つかりませんでした。:-)
ジョージ

41

SQLサーバー2005の新しいデータ型が導入されました。varchar(max)そしてnvarchar(max) 彼らは、古いテキスト型の利点を持っている:彼らはデータの2ギガバイトにOPを含めることができますが、彼らはまたの利点のほとんどを持っているvarcharnvarchar。これらの利点の中には、substring()などの文字列操作関数を使用する機能があります。

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

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

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


1
Edoodeに感謝します。VARCHARがいかに優れているかについて全体的に回答しましたが、VARCHARをいつ使用し、いつTEXTを使用するかについてのコメントやアイデアはありますか?私の質問は、2つの問題から1を選択することです。:-)
George2 2009

1
実際、MS SQL Server 2005では、TEXT列に対してSUBSTRINGおよびその他の関数を使用することもできます。
Quassnoi、2009

1
Quassnoiに感謝します。TEXTは廃止されたようです。もう1つの質問ですが、さまざまな状況でVARCHARまたはVARCHAR(MAX)を使用するかどうかをどのように選択するのでしょうか。
George2、2009

1
通常のvarcharが十分に大きくない場合にのみvarchar(max)を使用してください(8Kbで十分です;)
edosoft

7

2008年のmsにはいくつかの大きな変更がありました->使用するデータ型を決定するときは、次の記事を検討する価値があります。 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(max)列2 ^ 30-1 2 ^ 30-1

3
変更?これらの容量は、新しいデータ型が導入されてから変更されていません。
マーティンスミス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.