2011-08-03 17 views
2

MSDN has this to saynvarchar(4001)?件名に

のnvarchar [(N |最大)]

可変長のUnicode文字データ。 nは1〜4,000の値を取ることができます。 maxは、最大ストレージサイズが2^31-1バイトであることを示します。記憶領域のサイズは、入力された文字数の2倍+ 2バイトです。入力されるデータの長さは0文字です。 nvarcharのISOシノニムは、国の文字の変化と国の文字の変化です。

これは私を混乱させます。列の長さを1〜4000、つまり2147483647と定義できますが、間には何もありません。私の理解は正しいのですか?どうして私の間の値について明白にできないのですか?

答えて

4

NVARCHAR(MAX)は、他のすべてをカバーします(ではなく、20億文字)。 4000文字以上のデータが必要な場合は、データがページ外になる可能性が最も高いので、4,001文字、10,000文字、または10,000,000文字を使用していても問題はありません。それはあなたが必要なスペースを占有するだけなので、あなたが(2 billion characters - the length of your actual string)を無駄にしているとは思わないでください。

+0

+1 - 彼はまた、「MAX」はインデックス付けや制約がないことを認識する必要があります。 – JNK

+1

まあ、450を超えるものは、インデックスの900byteの制限のために問題を引き起こすでしょう。 – spender

+0

@spender。これは、列がインデックスにキー列として参加する必要がある場合にのみ該当します。あなたの声明は、誰も「NVARCHAR(> 450)」を宣言するべきではないことを暗示しているようです。 –

1

4000文字以下はストレージの点で1つの動作を持ち、MAXはストレージの点でもう1つの動作をします。そしてあなたは実際に1M文字の長さのもので文字列長の計算を強制的に開始したくないのですか?私の現在の理解は、最大4000文字がテーブルに格納され、MAXはテーブル外に格納されるということです。

また、NVARCHAR(MAX)およびVARCHAR(MAX)は、textおよびntextの置換えです。

+0

もしかしたら、MAXが行内に格納されていることを明示的に指定することができます。 –

2

Maxは、4001〜1073741823の間の値を受け入れます(実際の文字列の長さの約2倍です)。

制限は基本的に4000文字以上のものはMAXである必要があります。