672

とはどういう意味nvarcharですか?

SQL Server におけるcharncharvarchar、の違いは何ですか?nvarchar

4

12 に答える 12

929

片付けるためだけに...または要約するために...

  • ncharUnicode文字をnvarchar保存できます。
  • charUnicode文字を保存できません。varchar
  • charおよびnchar固定長であり、指定した文字数のスペースをすべて使用しなくても、そのスペースを予約します。
  • varcharおよびnvarchar可変長であり、格納する文字のスペースのみを使用します。またはのようなストレージは予約されませんcharnchar

ncharまた、nvarchar2倍のストレージスペースを使用するため、Unicodeサポートが必要な場合にのみ使用することをお勧めします。

于 2008-10-06T23:02:33.887 に答える
101
于 2011-11-23T23:37:48.643 に答える
38

nchar と char は、nvarchar と varchar と同様に、互いにまったく同じように動作します。それらの唯一の違いは、nchar/nvarchar が Unicode 文字を格納することです (拡張文字セットを使用する必要がある場合に不可欠です) が、varchar は格納しません。

Unicode 文字はより多くのストレージを必要とするため、nchar/nvarchar フィールドは 2 倍のスペースを占有します (たとえば、以前のバージョンの SQL Server では、nvarchar フィールドの最大サイズは 4000 です)。

この質問は、この質問の複製です

于 2008-10-06T22:51:40.553 に答える
34

さらに何かを追加するには: nchar - データに末尾のスペースを追加します。 nvarchar - データに末尾のスペースを追加しません。

そのため、「nchar」フィールドでデータセットをフィルタリングする場合は、RTRIM を使用してスペースを削除することをお勧めします。たとえば、BRAND という名前の nchar(10) フィールドには、NIKE という単語が格納されます。単語の右側に 6 つのスペースが追加されます。したがって、フィルタリングする場合、式は次のようになります 。RTRIM(Fields!BRAND.Value) = "NIKE"

私は今少し苦労していたので、これが誰かを助けることを願っています!

于 2011-07-21T05:34:35.867 に答える
26

既存の回答を要約して修正する私の試み:

まず、charおよびncharは、格納する文字列が使用可能な領域よりも小さい場合でも、常に一定量の格納領域を使用しますが、varcharおよびは、その文字列を格納nvarcharするために必要なだけの格納領域のみを使用します (さらに 2 バイトのオーバーヘッド、おそらく文字列の長さを格納するため)。したがって、「var」は変数空間のように「変数」を意味することを覚えておいてください。

理解すべき 2 番目の重要な点は、 では1 文字あたり正確に2 バイトを使用して文字列を保存するのに対しncharnvarcharでは照合コード ページによって決定されるエンコーディングを使用することです。これは通常、1 文字あたり正確に 1 バイトです (例外もありますが、以下を参照してください)。1 文字あたり 2 バイトを使用することで、非常に広範囲の文字を格納できるため、ここで覚えておくべき基本的なことは、国際化のサポートが必要な場合に、より適切な選択になる傾向があるということです。charvarcharncharnvarchar

次に、いくつかの細かい点について説明します。

まず、ncharnvarchar常にUCS-2 を使用してデータを格納します。ncharこれは、文字ごとに正確に 2 バイトが使用され、Basic Multilingual Plane (BMP) の任意の Unicode 文字をornvarcharフィールドに格納できることを意味します。ただし、すべてのUnicode 文字を格納できるわけではありません。たとえば、ウィキペディアによると、エジプトの象形文字のコード ポイントは BMP の範囲外です。したがって、UTF-8 で表現できる Unicode 文字列や、SQL Serverncharまたはnvarcharフィールドに格納できないその他の真の Unicode エンコーディングがあり、エジプトの象形文字で記述された文字列はその中に含まれます。幸いなことに、ユーザーはおそらくそのスクリプトを作成することはありませんが、覚えておく必要があります。

他の投稿者が強調したもう 1 つの紛らわしいが興味深い点は、照合コード ページで必要な場合、 charandvarcharフィールドが特定の文字に対して 1 文字あたり 2 バイトを使用する可能性があることです。(Martin Smith は、Chinese_Traditional_Stroke_Order_100_CS_AS_KS_WS がどのようにこの動作を示すかを示す優れた例を示しています。確認してください。)

更新: SQL Server 2012 の時点で、Latin1_General_100_CI_AS_SC など、最終的に UTF-16 のコード ページがあり、Unicode 範囲全体を完全にカバーできます。

于 2013-06-27T05:41:02.833 に答える
15
  • char:最大8000文字の固定長文字データ。
  • nchar:最大長4000文字の固定長Unicodeデータ。
  • Char=8ビット長
  • NChar=16ビット長
于 2009-11-02T09:35:40.443 に答える
10

nchar(10) は、長さ 10 の固定長 Unicode 文字列です。nvarchar(10) は、最大長 10 の可変長 Unicode 文字列です。通常、すべてのデータ値が 10 文字の場合は前者を使用し、後者を使用します。長さが違う場合。

于 2008-10-06T22:53:07.883 に答える
7

違いは次のとおりです。

  1. n [var] charはユニコードを格納しますが、[var]charはシングルバイト文字のみを格納します。
  2. [n] charは正確な長さの固定数の文字を必要としますが、[n]varcharは定義された長さまでの可変数の文字を受け入れます。

もう1つの違いは長さです。ncharとnvarcharはどちらも、最大4,000文字の長さにすることができます。また、charとvarcharの長さは最大8000文字です。ただし、SQL Serverの場合は、最大2,147,483,648文字を処理できる[n] varchar(max)を使用することもできます。(2ギガバイト、符号付き4バイト整数。)

于 2009-11-02T10:33:36.410 に答える
7

nchar は、 nvarcharよりも多くのスペースを必要とします。

例えば、

nchar(100) は、5 しか入力しない場合でも常に 100 文字を格納し、残りの 95 文字はスペースで埋められます。nvarchar(100) に 5 文字を格納すると、5 文字節約されます。

于 2008-11-18T11:04:45.893 に答える
4
  • nchar は固定長で、Unicode 文字を保持できます。文字ごとに 2 バイトのストレージを使用します。

  • varchar は可変長で、Unicode 文字を保持できません。文字ごとに 1 バイトのストレージを使用します。

于 2008-10-06T22:59:43.953 に答える
2

NVARCHARは Unicode 文字を格納でき、1 文字あたり 2 バイトを使用します。

于 2008-10-06T22:53:14.980 に答える