Transact-SQLクエリで文字列の前にNプレフィックスを使用する必要があるのはいつですか。このようなクエリを使用しても結果が得られないデータベースで作業を開始しました
_SELECT * FROM a_table WHERE a_field LIKE '%а_pattern%'
_
パターンを_N'%а_pattern%'
_に変更するまで。過去にこのプレフィックスを追加する必要がなかったので、興味があります。 _a_field
_はnvarchar(255)
として定義されていますが、理由は何か他にあると思います。
次の記事には、質問に関するいくつかの良い情報があります。簡単に言えば、使用しているUnicode列と非Unicode文字列リテラルの間に型の不一致があるということです。 KB記事から、Nプレフィックスを省略しても機能する場合がありますが、コードページとデータベースの照合設定によって異なります。以前に接頭辞なしの方法で成功していた場合は、これが動作の変化を説明している可能性があります。
これは、後続の文字列がUnicodeであることを示します(Nは実際には各国語の文字セットを表します)。これは、CHAR、VARCHAR、またはTEXTではなく、NCHAR、NVARCHAR、またはNTEXT値を渡すことを意味します。これらのデータ型の比較については、記事#2354を参照してください。
Unicodeは通常、英語や西ヨーロッパのコードページ(中国語など)を超えるコードページを容易にするように設計されたデータベースアプリケーションで使用されます。 Unicodeは、拡張文字セットがデータベースの列に「適合する」ように設計されています。
Nプレフィックスは、SQLサーバーに文字列をUnicode値として扱うように指示すると思います。 nvarchar列はUnicodeであるため、これらの列にアクセスするときはこの構文を使用する必要があります。