假设有一个表,名为"myTable"三列:

{**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'%аккаунт%'  )

第一个查询的返回的记录,但是,第二次不?为什么?

系统在这个问题经验:

*Windows XP的专业版2002-SP3
服务器的排序规则: Latin1_General_CI_AS)
版本: 9.00.3073.00
等级: SP2
Edition: 开发版

切断排序规则: SQL_Latin1_General_CP1_CI_AS
版本: 9.00.3054.00
等级: SP2
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
有帮助吗?

解决方案 3

好吧,研究了大量之后,我发现它确实是在SQL Server 2005中的以下版本中发现了一个问题:

Windows XP中 - 专业 - 2002年版 - SP3结果 版本:9.00.3073.00点击 等级:SP2结果 版:开发版结果

版本:9.00.3054.00结果 等级:SP2结果 版:企业版结果

..也可以是其它的版本。

FIX:升级到SP3

其他提示

能不能请你后的结果如下查询:

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

这将有助于缩小该问题的下降。

更新:

我可以看到结果的你的查询,你有一个问题编码。

西里尔文字从你的串常都被转换问题的标记(0x3F).

不幸的是,我不能再现这个行为 Management Studio 在我的测试服务器。

我估计有一些问题 OS 设置,作为西里尔字母最有可能甚至不到 SQL Server.

能否请你回答三个问题:

  1. 什么样的 OS 你使用(版本,语言, MUI 如果有任何)

    • 这是什么查询的回报:

      选择SERVERPROPERTY('SQLCharSetName')

    • 连接到你的服务器使用 osql.exe 和这个问题查询:

      选择投(名作为二进制), 投(N'аккаунт'作为二进制), 投(N'%аккаунт%'作为二进制) 从myTable t 在t.ID=4
      和t。X=1 去

    这是什么回报正在运行中 osql.exe?

两个查询返回相同的结果,我

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的版本是:

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)

我核对设置为:SQL_Latin1_General_CP1_CI_AS

我给Quassnoi结果: 0x30043A043A04300443043D04420400000000000000000000000000000000 0x30043A043A04300443043D04420400000000000000000000000000000000 0x250030043A043A04300443043D0442042500000000000000000000000000

(1行(一个或多个)受影响)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top