回答:
文字列をnvarchar
データ型として宣言するのではなく、varchar
Nプレフィックスを使用して文字列を渡すTransact-SQLコードを見たことがあるかもしれません。これは、後続の文字列がUnicodeであることを示します(Nは実際には各国語の文字セットを表します)。これは、CHAR、VARCHAR、またはTEXTではなく、NCHAR、NVARCHAR、またはNTEXT値を渡すことを意味します。
Microsoftから引用するには:
Unicode文字列定数の前に文字Nを付けます。Nプレフィックスを付けないと、文字列はデータベースのデフォルトのコードページに変換されます。このデフォルトのコードページは、特定の文字を認識しない場合があります。
これら2つのデータ型の違いを知りたい場合は、次のSO投稿を参照してください。
databases aspfaq com
極めて疑わしいウェブサイトへのリダイレクト(fkref com
、za1 zeroredirect1 com
、i0z13 trackvoluum com
)、ポルノ、悪質なサイトやスパムURLなど、当社の企業のファイアウォールでマークされています。私はaspfaq.comの所有者に連絡し、リンクを削除するために回答を編集しました。
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がないため、失敗すると思います。
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など)である場合、失敗するか、データが破損します。
N
は、次のデータ型を使用しているときにのみ使用することを意味しますCHAR, VARCHAR or TEXT
か?`NCHAR、NVARCHAR、またはNTEXT`は本質的にUNICODEを格納するため、個別に追加する必要はありません....それは本当ですか?