とはどういう意味nvarchar
ですか?
SQL Server におけるchar
、nchar
、varchar
、の違いは何ですか?nvarchar
片付けるためだけに...または要約するために...
nchar
Unicode文字をnvarchar
保存できます。char
Unicode文字を保存できません。varchar
char
およびnchar
は固定長であり、指定した文字数のスペースをすべて使用しなくても、そのスペースを予約します。varchar
およびnvarchar
は可変長であり、格納する文字のスペースのみを使用します。またはのようなストレージは予約されませんchar
nchar
。nchar
また、nvarchar
2倍のストレージスペースを使用するため、Unicodeサポートが必要な場合にのみ使用することをお勧めします。
nchar と char は、nvarchar と varchar と同様に、互いにまったく同じように動作します。それらの唯一の違いは、nchar/nvarchar が Unicode 文字を格納することです (拡張文字セットを使用する必要がある場合に不可欠です) が、varchar は格納しません。
Unicode 文字はより多くのストレージを必要とするため、nchar/nvarchar フィールドは 2 倍のスペースを占有します (たとえば、以前のバージョンの SQL Server では、nvarchar フィールドの最大サイズは 4000 です)。
この質問は、この質問の複製です。
さらに何かを追加するには: nchar - データに末尾のスペースを追加します。 nvarchar - データに末尾のスペースを追加しません。
そのため、「nchar」フィールドでデータセットをフィルタリングする場合は、RTRIM を使用してスペースを削除することをお勧めします。たとえば、BRAND という名前の nchar(10) フィールドには、NIKE という単語が格納されます。単語の右側に 6 つのスペースが追加されます。したがって、フィルタリングする場合、式は次のようになります 。RTRIM(Fields!BRAND.Value) = "NIKE"
私は今少し苦労していたので、これが誰かを助けることを願っています!
既存の回答を要約して修正する私の試み:
まず、char
およびnchar
は、格納する文字列が使用可能な領域よりも小さい場合でも、常に一定量の格納領域を使用しますが、varchar
およびは、その文字列を格納nvarchar
するために必要なだけの格納領域のみを使用します (さらに 2 バイトのオーバーヘッド、おそらく文字列の長さを格納するため)。したがって、「var」は変数空間のように「変数」を意味することを覚えておいてください。
理解すべき 2 番目の重要な点は、 では1 文字あたり正確に2 バイトを使用して文字列を保存するのに対しnchar
、nvarchar
では照合コード ページによって決定されるエンコーディングを使用することです。これは通常、1 文字あたり正確に 1 バイトです (例外もありますが、以下を参照してください)。1 文字あたり 2 バイトを使用することで、非常に広範囲の文字を格納できるため、ここで覚えておくべき基本的なことは、国際化のサポートが必要な場合に、より適切な選択になる傾向があるということです。char
varchar
nchar
nvarchar
次に、いくつかの細かい点について説明します。
まず、nchar
列nvarchar
は常にUCS-2 を使用してデータを格納します。nchar
これは、文字ごとに正確に 2 バイトが使用され、Basic Multilingual Plane (BMP) の任意の Unicode 文字をornvarchar
フィールドに格納できることを意味します。ただし、すべてのUnicode 文字を格納できるわけではありません。たとえば、ウィキペディアによると、エジプトの象形文字のコード ポイントは BMP の範囲外です。したがって、UTF-8 で表現できる Unicode 文字列や、SQL Servernchar
またはnvarchar
フィールドに格納できないその他の真の Unicode エンコーディングがあり、エジプトの象形文字で記述された文字列はその中に含まれます。幸いなことに、ユーザーはおそらくそのスクリプトを作成することはありませんが、覚えておく必要があります。
他の投稿者が強調したもう 1 つの紛らわしいが興味深い点は、照合コード ページで必要な場合、 char
andvarchar
フィールドが特定の文字に対して 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 範囲全体を完全にカバーできます。
char
:最大8000文字の固定長文字データ。nchar
:最大長4000文字の固定長Unicodeデータ。Char
=8ビット長NChar
=16ビット長nchar(10) は、長さ 10 の固定長 Unicode 文字列です。nvarchar(10) は、最大長 10 の可変長 Unicode 文字列です。通常、すべてのデータ値が 10 文字の場合は前者を使用し、後者を使用します。長さが違う場合。
違いは次のとおりです。
もう1つの違いは長さです。ncharとnvarcharはどちらも、最大4,000文字の長さにすることができます。また、charとvarcharの長さは最大8000文字です。ただし、SQL Serverの場合は、最大2,147,483,648文字を処理できる[n] varchar(max)を使用することもできます。(2ギガバイト、符号付き4バイト整数。)
nchar は、 nvarcharよりも多くのスペースを必要とします。
例えば、
nchar(100) は、5 しか入力しない場合でも常に 100 文字を格納し、残りの 95 文字はスペースで埋められます。nvarchar(100) に 5 文字を格納すると、5 文字節約されます。
nchar は固定長で、Unicode 文字を保持できます。文字ごとに 2 バイトのストレージを使用します。
varchar は可変長で、Unicode 文字を保持できません。文字ごとに 1 バイトのストレージを使用します。
NVARCHARは Unicode 文字を格納でき、1 文字あたり 2 バイトを使用します。