はどういう意味nvarchar
ですか?
違いは何ですかchar
、nchar
、varchar
、およびnvarchar
SQL Serverでは?
はどういう意味nvarchar
ですか?
違いは何ですかchar
、nchar
、varchar
、およびnvarchar
SQL Serverでは?
回答:
片付けるために...または要約する...
nchar
及びnvarchar
保存することができますUnicodeの文字が。char
およびUnicodeの保存ができない文字が。varchar
char
またnchar
、固定長であるため、指定した文字数分のストレージスペースが予約されますが、そのスペースをすべて使用していなくてもかまいません。varchar
そして、nvarchar
されている可変長だけが保管文字にスペースを使用します。それはのようなストレージを予約しませんchar
かnchar
。nchar
また、nvarchar
2倍のストレージ容量を使用するため、Unicodeサポートが必要な場合にのみ使用するのが賢明です。
n...
バージョンが私の回答が示す
これまでのすべての回答は、それvarchar
がシングルバイトであること、nvarchar
ダブルバイトであることを示しています。これの最初の部分は、以下に示すように、実際には照合に依存しています。
DECLARE @T TABLE
(
C1 VARCHAR(20) COLLATE Chinese_Traditional_Stroke_Order_100_CS_AS_KS_WS,
C2 NVARCHAR(20)COLLATE Chinese_Traditional_Stroke_Order_100_CS_AS_KS_WS
)
INSERT INTO @T
VALUES (N'中华人民共和国',N'中华人民共和国'),
(N'abc',N'abc');
SELECT C1,
C2,
LEN(C1) AS [LEN(C1)],
DATALENGTH(C1) AS [DATALENGTH(C1)],
LEN(C2) AS [LEN(C2)],
DATALENGTH(C2) AS [DATALENGTH(C2)]
FROM @T
戻り値
华
との国
文字はまだVARCHAR
バージョンに表示されておらず、黙ってに置き換えられて?
いることに注意してください。
その照合では、1バイトで表すことができる漢字は実際にはまだありません。単一バイト文字のみが、典型的なウエスタンASCIIセットです。
このためには、からの挿入が可能であるnvarchar(X)
のカラムvarchar(X)
カラム切り捨てエラーで失敗する(Xは両方の場合で同じである数を表します)。
SQL Server 2012では、をサポートするSC(補足文字)照合が追加されていますUTF-16
。これらの照合では、1つのnvarchar
文字に2バイトまたは4バイトかかる場合があります。
ncharとcharは、nvarcharとvarcharと同じように、ほとんど同じように動作します。それらの唯一の違いは、nchar / nvarcharがUnicode文字を格納する(拡張文字セットを使用する必要がある場合に必須)のに対し、varcharは格納しないことです。
Unicode文字はより多くのストレージを必要とするため、nchar / nvarcharフィールドは2倍のスペースを占有します(たとえば、以前のバージョンのSQL Serverでは、nvarcharフィールドの最大サイズは4000です)。
この質問は、重複のある、この1。
何かを追加するだけです: nchar-データに末尾のスペースを追加します。 nvarchar-データに末尾のスペースを追加しません。
したがって、「nchar」フィールドでデータセットをフィルタリングする場合は、RTRIMを使用してスペースを削除することができます。たとえば、BRANDと呼ばれるnchar(10)フィールドには、NIKEという単語が格納されます。単語の右側に6つのスペースが追加されます。したがって、フィルタリングする場合、式は次のようになり ます。RTRIM(Fields!BRAND.Value)= "NIKE"
これが少しの間苦労していたので、これが誰かの役に立つことを願っています!
既存の回答を要約して修正する私の試み:
まず、char
そしてnchar
常に、利用可能な空間よりも小さくなっているのに対し、文字列を格納する場合であっても、記憶空間の固定された量を使用するvarchar
とnvarchar
、文字列(プラスオーバーヘッドの2バイトことを記憶するために必要されるだけ多くの収納スペースとして使用します、おそらく文字列の長さを格納します)。したがって、変数スペースの場合と同様に、「var」は「変数」を意味します。
理解するための第二の主要点は、つまり、nchar
およびnvarchar
使用してストアの文字列を正確に文字あたり2バイトを、一方char
およびvarchar
エンコーディングを使用します照合コードページによって決定通常の文字ごとに1つのバイトである(例外はありますが、以下を参照してください)。ここで覚えておくべき基本的なことがあることであるので、1文字ごとに2つのバイトを使用することにより、文字の非常に広い範囲が、保存することができますnchar
し、nvarchar
あなたはおそらく行う国際化サポートを、欲しいときより良い選択をする傾向があります。
次に、いくつかの細かい点について説明します。
まず、nchar
およびnvarchar
列は常に UCS-2を使用してデータを格納します。つまり、文字ごとに正確に2バイトが使用され、Basic Multilingual Plane(BMP)のすべてのUnicode文字をnchar
or nvarchar
フィールドで格納できます。しかし、それがいる場合ではない任意の Unicode文字を格納することができます。たとえば、Wikipediaによると、エジプトの象形文字のコードポイントはBMPの外にあります。したがって、UTF-8で表現できるUnicode文字列と、SQL Server nchar
またはnvarchar
フィールドに格納できないその他の真のUnicodeエンコーディングがあり、エジプトの象形文字で書かれた文字列がその中に含まれます。幸い、ユーザーはおそらくそのスクリプトを記述しないでしょうが、これは覚えておくべきことです。
もう一つの混乱が、他のポスターが強調していることは興味深い点は、ということであるchar
とvarchar
照合コードページがそれを必要とする場合のフィールドが特定の文字に1文字ごとに2つのバイトを使用することができます。(マーティン・スミスは、Chinese_Traditional_Stroke_Order_100_CS_AS_KS_WSがこの動作をどのように示すかを示す優れた例を示しています。確認してください。)
更新: SQL Server 2012では、最終的にUTF-16のコードページが存在します。たとえば、Latin1_General_100_CI_AS_SCは、Unicodeの範囲全体を完全にカバーできます。
char
:最大長が8000文字の固定長文字データ。nchar
:最大長が4000文字の固定長Unicodeデータ。Char
= 8ビット長NChar
= 16ビット長char
8ビット長にすることはできません。長さを格納する必要はありません。固定長は最大8000文字です。
nchar[(n)]
(国民性)
n
文字列の長さを定義し、1〜4,000の値でなければなりません。n
バイトの2倍です。nvarchar [(n | max)]
(国の特性は異なります。)
n
文字列の長さを定義し、1〜4,000の値を指定できます。max
最大ストレージサイズが2 ^ 31-1バイト(2 GB)であることを示します。char [(n)]
(キャラクター)
non-Unicode
文字列データ。n
文字列の長さを定義し、1〜8,000の値でなければなりません。n
バイトです。varchar [(n | max)]
(キャラクターは異なります)
n
文字列の長さを定義し、1〜8,000の値を指定できます。max
最大ストレージサイズが2 ^ 31-1バイト(2 GB)であることを示します。違いは次のとおりです。
別の違いは長さです。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(10)は、長さが10の固定長Unicode文字列です。nvarchar(10)は、最大長が10の可変長Unicode文字列です。通常、すべてのデータ値が10文字で、後者は前者を使用します。長さが異なる場合。
ncharは固定長で、Unicode文字を保持できます。1文字あたり2バイトのストレージを使用します。
varcharは可変長で、Unicode文字を保持できません。文字ごとに1バイトのストレージを使用します。
UCS-2
(これはSQL Serverで使用されるエンコードです)は、すべての文字を正確に 2バイトで格納します。msdn.microsoft.com / en- us / library / bb330962%28v=sql.90%29.aspxを参照してくださいSQL Server stores Unicode in the UCS-2 encoding scheme... UCS-2 is a fixed-length encoding that represents all characters as a 16-bit value (2 bytes)
。SQL Server 2008はSCSU圧縮を使用できますが、UCS-2でエンコードされたUnicode文字列の圧縮のままです:msdn.microsoft.com/en-us/library/ee240835.aspx
NVARCHARはUnicode文字を格納でき、1文字あたり2バイトを使用します。
nvarchar
常に1文字あたり2バイトを使用します。