问题描述
当我在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'αυρ')