SQL Server 2019 CHARINDEX returns 奇怪的结果

SQL Server 2019 CHARINDEX returns weird result

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

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

可能是什么问题?

如评论中所述,这可能是因为您没有将字符串文字声明为 Unicode 字符串,而是在字符串中使用了 Unicode 字符。 SQL 服务器会将字符串转换为另一个代码页,并且处理得不好。尝试 运行 此查询以查看差异。

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

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

a? a?? αρ αυρ

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

有可能适用的不同排序规则。它们具有不同的特性,例如,有些区分大小写,有些则不区分大小写。此外,并非所有排序规则都安装在每个 SQL 服务器实例中。值得 运行 SELECT * from sys.fn_helpcollations() 查看所有已安装的描述。

如果您将查询更改为此,您应该会得到所需的结果。

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