2017-09-13 9 views
3

を返します。フィールド名は任意のテーブルの任意の列に置き換えることができます。SQL_Latin1_General_CP1_CI_ASUnicodeの述語は、すべての行

すべてのタイプのフィールドについてSQLServer Express、SQLServer 2012,2016でテストしました。

これはなぜ起こっているのですか?

誰でもあなたのために同じであることを確認できますか?以下

シンプルREPROである:あなたのケースでは

create table dbo.test111 
(
id int 
) 

insert into dbo.test111 
select ROW_NUMBER() over (order by (Select null)) 
from 
sys.objects s 
cross join 
sys.objects s1 

select * from dbo.test111 where id like 
N'%өө%' 
+0

何この文字は 'өө'で、すべてのレコードは、そのうちの一つを持っているのですか? –

+3

あなたのデータベースはどのような照合をしていますか? – Filburt

+0

@フィルバート私はあなたが何かをしていると思うので...「菜園」が他の(共通の)キャラクターと照合していると言っていますか? –

答えて

4

、あなたはこれが期待される結果が得られるはずSupplementary Characters

[FieldName] like N'%өө%' collate Latin1_General_100_CI_AS_SC 

のための照合を使用する必要があります。

デモを見ると、照合を削除するとすべてのレコードが返されることがわかります。

Demo

+0

私のデータベースのデフォルト照合をLatin1_General_100_CI_AS_SCに変換すると、毎回照合順序を使用する必要はありませんか? – THEn

+1

はい、これをデータベースレベルで処理したい場合は、db照合を変更する必要があります。 (あなたのサーバ*デフォルトの照合を変更する必要はありません) – Filburt

+1

@Filburtあなたの答えをありがとう。私が理解できない唯一のことは、補足文字について読んだ場合、0xFFFFより大きいコードポイント値を持つ文字は2つの連続した16ビットワードを必要とする文字です。これらの文字は補助文字と呼ばれ、2つの連続する16ビットワードはサロゲートペア"それはOKですが、OPキャラクターはEEEEよりも** less **のコードポイント1257(4E9)を持っていますので、どのように補足されたのか分かりましたか? – sepupic