T-SQLステートメントの接頭辞Nの意味は何ですか?いつ使用する必要がありますか?


352

一部の挿入T-SQLクエリでプレフィックスNを確認しました。多くの人がN値をテーブルに挿入する前に使用しました。

検索Nしましたが、テーブルに文字列を挿入する前に、を含めることの目的がわかりませんでした。

INSERT INTO Personnel.Employees
VALUES(N'29730', N'Philippe', N'Horsford', 20.05, 1),

この「N」接頭辞はどのような目的に使用されますか、いつ使用する必要がありますか?

回答:


415

文字列をnvarcharデータ型として宣言するのではなく、varchar

Nプレフィックスを使用して文字列を渡すTransact-SQLコードを見たことがあるかもしれません。これは、後続の文字列がUnicodeであることを示します(Nは実際には各国語の文字セットを表します)。これは、CHAR、VARCHAR、またはTEXTではなく、NCHAR、NVARCHAR、またはNTEXT値を渡すことを意味します。

Microsoftから引用するに

Unicode文字列定数の前に文字Nを付けます。Nプレフィックスを付けないと、文字列はデータベースのデフォルトのコードページに変換されます。このデフォルトのコードページは、特定の文字を認識しない場合があります


これら2つのデータ型の違いを知りたい場合は、次のSO投稿を参照してください。

varcharとnvarcharの違いは何ですか?


1
@Curt Nは、次のデータ型を使用しているときにのみ使用することを意味しますCHAR, VARCHAR or TEXTか?`NCHAR、NVARCHAR、またはNTEXT`は本質的にUNICODEを格納するため、個別に追加する必要はありません....それは本当ですか?
Pritesh

@Pritesh-上記の太字のテキストのように、これらのUnicode文字を認識しない可能性があるデフォルトのコードページを使用している場合のみ。
Todd

5
リンク@Curt databases aspfaq com極めて疑わしいウェブサイトへのリダイレクト(fkref comza1 zeroredirect1 comi0z13 trackvoluum com)、ポルノ、悪質なサイトやスパムURLなど、当社の企業のファイアウォールでマークされています。私はaspfaq.comの所有者に連絡し、リンクを削除するために回答を編集しました。
jaume 2015年

21

N'プレフィックスで起こった厄介なことをお話ししましょう。2日間は修正できませんでした。

私のデータベース照合はSQL_Latin1_General_CP1_CI_ASです。

MyCol1という列を持つテーブルがあります。それはNvarcharです

このクエリは、存在する正確なと一致しません

SELECT TOP 1 * FROM myTable1 WHERE  MyCol1 = 'ESKİ'  

// 0 result

接頭辞N ''を使用すると修正されます

SELECT TOP 1 * FROM myTable1 WHERE  MyCol1 = N'ESKİ'  

// 1 result - found!!!!

どうして?latin1_generalには大きな点線 Becauseがないため、失敗すると思います。


8

1.パフォーマンス:

where句が次のようであるとします。

WHERE NAME='JON'

NAME列がnvarcharまたはnchar以外のタイプの場合は、Nプレフィックスを指定しないでください。ただし、NAME列のタイプがnvarcharまたはncharの場合、Nプレフィックスを指定しないと、「JON」は非Unicodeとして扱われます。これは、NAME列と文字列「JON」のデータ型が異なるため、SQL Serverは暗黙的に一方のオペランドの型を他方の型に変換することを意味します。SQL Serverがリテラルの型を列の型に変換する場合、問題はありませんが、逆の場合、列のインデックス(使用可能な場合)が使用されないため、パフォーマンスが低下します。

2.文字セット:

列のタイプがnvarcharまたはncharの場合、WHERE基準/ UPDATE / INSERT句で文字列を指定するときは常に接頭辞Nを使用します。これを行わず、文字列内の文字の1つがUnicode(国際文字-例-likeなど)である場合、失敗するか、データが破損します。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.