13

現在 SQL Server 2000 をバックエンドとして実行している asp.net Web サイト プロジェクトを継承しました。

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

stackoverflow をブラウジングしているときに、これに出くわしました: 常に nvarchar(MAX) を使用することには欠点がありますか?

varchar(max)ユーザー mattruma は、SQL Server 2000 での使用について「難しい方法」を見つけたと言います。

varchar(max)ライブ データベースが SQL Server 2000 で実行されている場合、代わりに何を使用すればよいですか?

助けてくれてありがとう!

4

4 に答える 4

17

VARCHAR(Max)は SQL Server 2005 で導入されましたが、SQL Server 2000 では動作しませんVARCHAR(8000)。十分に大きいと仮定して、どちらかを使用する必要があります。それ以外の場合は、使用する必要がありますTEXT

編集

VARCHAR(8000)また、覚えておくために切り替えると、1 行に 8060 バイトを超える制限があることに注意してください。したがって、varchar(8000)テーブルをいっぱいにして、他の大きな列がたくさんある場合は、エラーが発生します。ここでText出番です。

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

于 2009-04-10T14:24:11.897 に答える
11

varchar(MAX)ライブ DB がサポートされていない SQL Server 2000 である場合、制限は議論の余地があるように思えます。保存する文字数が 8,000 を超える場合は、他のオプションであるTEXT列しか残されていません。TEXTただし、列にも多くの制限があることに注意してください。

たとえば、それらを簡単に並べ替えたりグループ化したりすることはできません。また、それらを他の列と同等に比較することもできません。それはあなたが言うことができないSelect * from mytable where Mytext1 = mytext2です。

その他の関連する懸念事項:

  • Unicode をサポートする方法に関係なく 、 NTextor列を使用することをお勧めします。NVarchar
  • テーブルに他の多くの列があり、そのvarchar(8000)列が頻繁にいっぱいになる可能性がある場合は、8K の行制限で問題が発生する可能性があります。これも覚えておいてください。
于 2009-04-10T14:29:41.867 に答える
2

TEXT 列を使用します。

于 2009-04-10T14:23:48.137 に答える
0

これは、ニーズによって異なります。VARCHAR(MAX) の代わりに TEXT 列を使用できますが、TEXT および NTEXT フィールドでのような比較を行うことができないため、実装でそのフィールドを検索する必要がないことを確認する必要があります。

8000 文字に制限できる場合は、VARCHAR(8000) 列を使用して情報を保存します。

于 2009-04-10T14:28:08.470 に答える