2017-02-16 7 views
0

SQL Server v12.0.2のNVARCHARフィールドへのクエリで文字列定数のエンコーディングに問題があります。 N個の接頭辞が付いていないクエリでは、全国の文字を使用する必要があります(すべて同一の単一コードページ、たとえばキリル文字WIN1251)。SQL Server:SQLの文字列定数のエンコーディング

可能ですか?

例:

1. CREATE TABLE TEST (VALUE NVARCHAR(100) COLLATE Cyrillic_General_CI_AS); 
2. INSERT INTO TEST VALUES (N'привет мир'); 
3. INSERT INTO TEST VALUES ('привет мир'); 
4. SELECT * FROM TEST; 

これは、2つの行が返されます:

| привет мир | 
| ?????? ??? | 

をだから、最初のインサートが正しく動作するには、私はTEST.VALUE列がCyrillic_General_CI_ASにまとめるため、2番目が同じことを行うことを期待しています。しかし、国別文字はフィールドの照合を無視し、他の場所からコードページを使用するようです。

この場合、複数のコードページの文字と1バイトエンコーディングに適合しない言語を使用することはできませんが、それは問題ありません。他のオプションは、文字列定数の前にN個の接頭辞を使用するようにすべてのクエリを変更することですが、不可能です。 Nプレフィックスなし

答えて

2

、文字列がデータベース、あなたがに挿入しているではないテーブルのデフォルトコードページに変換されます(詳細についてはMSDNを参照)

ですからにデータベースの照合順序を変更する必要がありますどちらかCyrillic_General_CI_AS、またはすべての文字列定数を見つけてN接頭辞を挿入します。

+0

また、データベースのエンコードをCyrillic_General_CI_ASに設定しようとしました(例:[here](https://support.microsoft.com/en-us/help/239530/you-must-precede-all) -unicode-strings-with-a-prefix-with-unicode-string-const-in-sql-server)は、トランスコード時にDBのデフォルトコードページを使用する各国文字を指定していますが、助けて – vbe

+0

@vbeそれはちょっと奇妙に見えます。私のDBのすべてが正確にCyrillic_General_CI_ASの照合を持っていて、それにcyryllic文字でいくつかの文字列定数を選択し、N接頭辞なしでうまくいきます。 。 –

+0

サンプルスクリプト(動作しません!): 'CREATE DATABASE TEST COLLATE Cyrillic_General_CI_AS; CREATE TABLE TEST.dbo.TEST ( 値NVARCHAR(10)COLLATE Cyrillic_General_CI_AS ); INSERT INTO TEST.dbo.TEST VALUES( 'приветмир'); SELECT * FROM TEST.dbo.Test; ' – vbe

関連する問題