SQL Server 2019 CHARINDEX返回奇怪的结果

问题描述

当我在sql Server 2019中运行以下查询时,结果为1,而应为0。

select CHARINDEX('αρ','αυρ')

可能是什么问题?

解决方法

正如评论中提到的那样,可能是因为您没有将字符串文字声明为Unicode字符串,而是在字符串中使用了Unicode字符。 SQL Server会将字符串转换为另一个代码页,并且做得不好。尝试运行此查询以查看区别。

SELECT 'αρ','αυρ',N'αρ',N'αυρ'

在我的服务器上,给出以下输出:

一个?一种?? αραυρ

另一个问题是CHARINDEDX使用输入的排序规则,我认为在这种情况下可能未正确设置该排序规则。您可以通过在输入之一上设置排序规则来强制排序规则。也可以在实例,数据库和列级别进行设置。

可能有不同的归类。它们具有不同的功能,例如有些区分大小写,有些则不然。同样,并非所有排序规则都随每个SQL Server实例一起安装。值得运行SELECT * from sys.fn_helpcollations()来查看所有已安装产品的描述。

如果将查询更改为此,则应获得所需的结果。

SELECT CHARINDEX(N'αρ' COLLATE Greek_BIN,N'αυρ')