2009-03-17 4 views
3

は、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 

答えて

0

よしは、多くの研究の後、私はそれが実際にSQL Server 2005の次のバージョンで見つかった問題であるが見つかりました:

のWindows XP - プロフェッショナル - バージョン2002 - SP3
バージョン: 9.00.3073.00
レベル:SP2
版:Developer Editionの

バージョン:9.00.3054.00
レベル:SP2
版:エンタープライズ版

..他のバージョンも同様です。

FIX:SP3にアップグレードします。

1

両方のクエリが返します同じ結果fそれともわたし。

select * from myTable as t 
where t.ID=4 
AND t.X = 1 
AND (t.Name = N'аккаунт') 

戻り値:

ID   X   Name 
----------- ----------- ------------ 
4   1   аккаунт 

そして

select * from myTable as t 
where t.ID=4 
AND t.X = 1 
AND (t.Name LIKE N'%аккаунт%') 

戻り値:

ID   X   Name 
----------- ----------- ------------ 
4   1   аккаунт 

(1行(複数可)の影響を受ける)

SQL Serverの私のバージョンがある:QuassnoiためSQL_Latin1_General_CP1_CI_AS

私の結果:

Microsoft SQL Server 2005 - 9.00.3077.00 (Intel X86) 
    Dec 17 2008 15:19:45 
    Copyright (c) 1988-2005 Microsoft Corporation 
    Express Edition on Windows NT 5.1 (Build 2600: Service Pack 3) 

マイ照合は次のように設定され 0x30043A043A04300443043D04420400000000000000000000000000000000 0x30043A043A04300443043D04420400000000000000000000000000000000 0x250030043A043A04300443043D0442042500000000000000000000000000

(1行(複数可)の影響を受ける)

+0

この結果が期待されます。 @ Newbieのキリル文字のリテラルは疑問符に変換されますが、おそらくクライアント側でエンコードに問題があります。 – Quassnoi

+0

使用しているSQL Serverのバージョンを教えてください。ありがとう! – Newbie

3

次のクエリの結果を投稿してください。

SELECT CAST(name AS BINARY), 
     CAST(N'аккаунт' AS BINARY), 
     CAST(N'%аккаунт%' AS BINARY) 
FROM myTable t 
WHERE t.ID = 4 
     AND t.X = 1 

これは、問題を絞り込むのに役立ちます。

UPDATE:

私はあなたのクエリの結果からわかるように、あなたはエンコーディングに問題があります。

文字列定数のキリル文字のリテラルが疑問符(0x3F)に変換されています。

残念ながら、テストサーバーでManagement Studioとこの現象を再現できません。

OSの設定にはいくつかの問題があります。キリル文字はほとんどの場合、SQL Serverに届かない可能性があります。

あなたはさらに3つの質問に答えてくださいでした:あなたはこのクエリのリターンを何(バージョン、言語、MUIもしあれば)

  • を使用している

    1. OS

      SERVERPROPERTY( 'SQLCharSetName')

    2. サーバーに接続osql.exeを使用して、このクエリを発行します。

      SELECT CAST(BINARY AS名)、 CAST(N'аккаунт」BINARY AS)、 CAST(N 'BINARY AS%のаккаунтの%') mytableはFROM = 4
      t.IDとTx = 1 GOが

それはosql.exeで実行されて返すんは何トン ?

+0

あなたは今すぐ結果を見ることができます。助けてくれてありがとう! – Newbie

+0

このクエリは、Microsoft Sql Server Management Studioですぐに動作しません。 – Newbie

+0

Microsoft SQL Server Management Studio \t 9.00.3042.00 – Newbie

関連する問題