2009-04-10 12 views
12

私は現在SQL Server 2000をバックエンドとして実行しているasp.net Webサイトプロジェクトを継承しています。varchar(max)MS SQL Server 2000、問題?

SQL Server 2005 Expressを使用して、dbのローカルコピーでいくつかのデータベース変更を行ってきました。私はvarchar(max)列を使用してテーブルを作成しました。これらは、任意の長さのXHTMLスニペットを格納するために使用されます。私はこの出くわしたstackoverflowの上で周りの閲覧中

Are there any disadvantages to always using nvarchar(MAX)?

ユーザーmattruma彼は私がvarchar(max)の代わりに何を使用する必要がありますSQL Server上で2000

varchar(max)の使用について「ハードな方法を」見つけたと言いますライブデータベースはSQL Server 2000上で実行されることを前提にしていますか?

ありがとうございました!

答えて

11

varchar(MAX)のように聞こえるのは、ライブDBがSQL Server 2000であり、これをサポートしていない場合です。格納する文字数が8Kを超えている場合は、唯一の他のオプションであるTEXTの列がかなり残っています。ただし、TEXT列にも多くの制限があることに注意してください。

たとえば、簡単にソートまたはグループ化することはできません。また、他の列との同等性を比較することもできません。つまり、Select * from mytable where Mytext1 = mytext2と言うことはできません。

その他の関連する懸念:

  • 私は関係なく、あなたがUnicodeをサポートするために行く道のNTextまたはNVarchar列を使用してお勧めしたいです。
  • テーブルに多数の他の列があり、varchar(8000)列が頻繁に満杯に近づく可能性が高い場合は、8 KBの行制限に問題がある可能性があります。これも覚えておいてください。
1

TEXT列を使用します。

+0

テキストフィールドを使用すると、そのフィールドの検索が妨げられます。 – TheTXI

+0

@TheTXI - その列の検索に関するOPの質問には何もありません。 –

+0

[将来のバージョンのMicrosoft SQL Serverで削除される](http://msdn.microsoft.com/en-us/library/ms187993.aspx)のため、TEXTデータ型の使用をお勧めしません。 –

15

VARCHAR(Max)はSQL Server 2005に導入されており、SQL Server 2000では機能しません。VARCHAR(8000)のいずれかを使用する必要があります。あなたはVARCHAR(8000)に切り替えるそうでない場合、あなたが

編集TEXT

を使用する必要があります。また、単一の行が8060バイト、より多くを持つことができないという限界がある心に留めておきます。したがって、varchar(8000)テーブルをいっぱいにして、他の大きな列がある場合は、エラーが発生します。これはTextが入っています。

Textは、デフォルトでは別の場所に格納され、ポインタをテーブルに保持するため、パフォーマンスに影響します。テキスト型が特定のサイズに達するまでテーブルに保持されるようにこの動作を変更するsetオプションがあります。ほとんどブロブが小さい場合は、これを有効にしたいかもしれません。

+0

VARCHAR(8000)に切り替える必要がありました。 – mattruma

0

これは必要に応じて異なります。 VARCHAR(MAX)の代わりにTEXT列を使用できますが、TEXTフィールドとNTEXTフィールドの比較のように、フィールドを検索する必要はありません。

自分自身を8000文字に制限できる場合は、情報を格納するためにVARCHAR(8000)列を使用します。

+0

nvarchar(4000)の意味ですか?またはvarchar(8000)? – gbn

+0

良いキャッチ、私は応答を更新しました。 –

関連する問題