2017-01-06 16 views
1

問題があります。私は"č", "ř", "ž"などの中央ヨーロッパの文字を持つSQLサーバーに格納されたデータを持っています。データベースでは、これらの文字を受け入れる必要があります "Czech_CI_AS"照合があります。私はこのように、この文字をストリートの一例名を選択しようとすると、しかし:SQLの中央ヨーロッパ文字

SELECT * 
FROM Street where Name = 'Čáslavská' 

それは私が「C」を削除すると、何も が、それは私が必要なものを私に返していない私を返します。

SELECT * 
FROM Street where Name like '%áslavská' 

私はこの列をnvarcharタイプにしました。しかし、文字列の前にN文字を使用することはできません。外部アプリケーションがこのテーブルを読み取りに使用し、選択が自動的に行われるからです。

ここにはどのような解決策がありますか?それとも私は何か間違っているのですか?

+0

データベースのプロパティと「名前」列のプロパティの両方で、同じ照合「Czech_CI_AS」が表示されますか。 –

+2

正しいSQLアプローチについて言えば、文字列の前にN charを使用する必要があります。もし私があなただったら、特定の文字を標準英語アルファベットに置き換える方法を考えてみましょう –

+1

@soldous照合Czech_CI_ASのnvarcharカラムを使って新しいテーブルを使って簡単なテストを行いましたが、再現できませんでしたあなたの問題;あなたのクエリは大文字の 'Č'と小文字の' ''であってもうまく動作しているようです。あなたは[MCVE](http://stackoverflow.com/help/mcve)を提供していただけますか? –

答えて

0

@YuriyTsarkovは本当にここ信用をdeservers任意の助け

感謝。彼の答えを詳述する。 MSDNから

:Nプレフィックスなしの手紙N.と

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

-- Storing Čáslavská in two vars, with and without N prefix. 
DECLARE @Test_001 NVARCHAR(255) = 'Čáslavská' COLLATE Czech_CI_AS; 
DECLARE @Test_002 NVARCHAR(255) = N'Čáslavská' COLLATE Czech_CI_AS; 

-- Test output. 
SELECT 
    @Test_001 AS T1, 
    @Test_002 AS T2 
; 

戻り

T1   T2 
Cáslavská Čáslavská 
0

あなたはNで選択を使用するために、すべての外部アプリケーションコードを更新する必要がある、または、あなたがあなたの列の照合順序を変更する必要があります外部アプリケーションで使用されるものと同じです。データが失われる可能性があります。