4

我有这个 SQL 代码

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

char(140) = Œ,在字符串“manoeuvre”中不存在。然而 SQL 服务器返回以下

4(表示它已经在这条线上找到了 char(140))

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

人* uvre

似乎 SQL 已经用一个字符替换了“o”和“e”,但为什么呢?为什么要用“Œ”替换“oe”?

使用字符串 'mass' 和 'ß' 可以看到相同的效果(我相信这是双 s 的德语)。替换此字符会返回字符串“ma*”。

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

编辑额外信息:

SQL 服务器 2008 R2。

数据库的排序规则是 Latin1_General_CI_AS。

4

1 回答 1

3

如果您查找该符号(ASCII 140),它被描述为

大写OE连字

例如见www.table-ascii.com

尝试

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

这将进行二进制搜索。

于 2012-06-06T14:18:50.383 回答