は、3つの列と "MYTABLE" という名前のテーブルがあると仮定:奇妙なSQLの動作、なぜこのクエリは何も返しませんか?
{**ID**(PK, int, not null),
**X**(PK, int, not null),
**Name**(nvarchar(256), not null)}.
レッツ{4、1、аккаунт}テーブルのレコードです。
select * from myTable as t
where t.ID=4
AND t.X = 1
AND ( t.Name = N'аккаунт' )
select * from myTable as t
where t.ID=4
AND t.X = 1
AND ( t.Name LIKE N'%аккаунт%' )
最初のクエリはレコードを返しますが、2番目のクエリは返されません。どうして?この問題は経験している
システム:
*のWindows XP - プロフェッショナル - バージョン2002 - SP3
Serverの照合順序: Latin1_General_CI_AS
バージョン:9.00.3073.00
レベル: SP2
エディション:開発者版
Severを照合:順序SQL_Latin1_General_CP1_CI_AS
バージョン:9.00.3054.00
レベル: SP2
版: Enterprise Editionの
結果:
SELECT SERVERPROPERTY('SQLCharSetName')
iso_1
Using OSQL.exe
0x30043A043A04300443043D04420400000000000000000000000000000000
0x3F3F3F3F3F3F3F0000000000000000000000000000000000000000000000
0x253F3F3F3F3F3F3F25000000000000000000000000000000000000000000
SELECT CAST(name AS BINARY),
CAST(N'аккаунт' AS BINARY),
CAST(N'%аккаунт%' AS BINARY)
FROM myTable t
WHERE t.ID = 4
AND t.X = 1
CAST(name AS BINARY)
0x30043A043A04300443043D04420400000000000000000000000000000000
CAST(N'аккаунт' AS BINARY)
0x3F3F3F3F3F3F3F0000000000000000000000000000000000000000000000
CAST(N'%аккаунт%' AS BINARY)
0x253F3F3F3F3F3F3F25000000000000000000000000000000000000000000
この結果が期待されます。 @ Newbieのキリル文字のリテラルは疑問符に変換されますが、おそらくクライアント側でエンコードに問題があります。 – Quassnoi
使用しているSQL Serverのバージョンを教えてください。ありがとう! – Newbie