为什么CHARINDEX函数在字符串'maneuver'中返回'Œ'的索引?

时间:2012-06-06 14:12:09

标签: sql sql-server-2008

我有这个SQL代码

declare @s varchar(8000) = 'manoeuvre'
select  CHARINDEX(char(140), @s, 0)

char(140)=Œ,在字符串'机动'中不存在。 但是SQL Server返回以下内容

  

4(表示它已在该行上找到了char(140))

如果我用'*'替换'Œ',我得

  

人* uvre

似乎SQL已经用一个字符取代了'o'和'e',但为什么呢? 为什么用'Œ'代替'oe'?

同样的效果可以看到字符串'mass'和'ß'(我认为是双s的德语)。替换此字符会返回刺痛'ma *'。

SQL是否试图在幕后做一些“聪明”的事情?

EDIT 额外信息:

SQL server 2008 R2。

数据库的整理是Latin1_General_CI_AS。

1 个答案:

答案 0 :(得分:3)

如果您查找该符号(ASCII 140),则将其描述为

  

资本OE结扎

例如,请参阅www.table-ascii.com

select  CHARINDEX(char(140), @s COLLATE Latin1_General_BIN, 0)

将进行二分查找。