Transact-SQLクエリの文字列の前のNプレフィックス


41

Transact-SQLクエリで文字列の前にNプレフィックスを使用する必要がある場合、教えてください。私はこのようなクエリを使用して結果を取得しないデータベースで作業を開始しました

SELECT * FROM a_table WHERE a_field LIKE '%а_pattern%'

パターンをに変更するまでN'%а_pattern%'。過去にこのプレフィックスを追加する必要がなかったので、興味があります。a_fieldはと定義されてnvarchar(255)いますが、その理由は他の何かだと思います。

回答:


31

次の記事には、質問に関するいくつかの良い情報があります。簡単な答えは、使用しているUnicode列と非Unicode文字列リテラルの型が一致しないということです。KBの記事から、Nプレフィックスを省略しても機能する場合がありますが、コードページとデータベースの照合設定に依存します。以前に接頭辞なしの方法で成功していた場合、それは動作の変更を説明するかもしれません。

https://support.microsoft.com/en-us/kb/239530


6

これは、後続の文字列がUnicodeであることを示します(Nは実際には各国語文字セットを表します)。これは、CHAR、VARCHAR、またはTEXTではなく、NCHAR、NVARCHAR、またはNTEXT値を渡すことを意味します。これらのデータ型の比較については、記事#2354を参照してください。

通常、Unicodeは、英語や西ヨーロッパのコードページ以外の中国語などのコードページを容易にするために設計されたデータベースアプリケーションで使用されます。Unicodeは、拡張文字セットがデータベース列に「適合する」ように設計されています。


3

Nプレフィックスは文字列をUnicode値として処理するようにSQLサーバーに指示すると思います。nvarchar列はUnicodeであるため、これらの列にアクセスするときはこの構文を使用する必要があります。

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