【发布时间】:2020-10-30 19:06:43
【问题描述】:
当我在 SQL Server 2019 中运行以下查询时,结果为 1,而应该为 0。
select CHARINDEX('αρ', 'αυρ')
可能是什么问题?
【问题讨论】:
-
事实上,您没有将
N放在您的文字前面以指定N[VAR]CHAR,因此受您默认的[VAR]CHAR排序规则支持的支配。如果你这样做SELECT 'αρ', 'αυρ', N'αρ', N'αυρ',你应该会看到你的字符串是如何被破坏的。 -
如果我将表中的任何字段定义为 nvarchar (max),它会自动获取 N 吗?因为我写了一个 sql 函数,当我运行它时 select DBO.splitstring(N'αυρ',N'αρ') /* resul is 0 / ,但是当我运行它时,select * from [yazitlar] where dbo .splitstring([yazit], N'αρ' ) = 1 order by idx / [yazit] 是 nvarchar(max) 并且返回的行只包含 Αὐρ */
-
这很可能与您的
dbo.SplitString函数的定义方式有关,这不是问题所在。请注意Αὐρ不是αυρ——这些字符串是否被认为是相同的,即使它们没有被破坏,也取决于列的排序规则(通常是数据库的排序规则,但可以是不同的)。排序规则指示比较结果,适用于VARCHAR和NVARCHAR类似;对于VARCHAR,它还决定了可以存储哪些字符。 -
我能够更清楚地识别问题;选择 CHARINDEX( N'αρ',N'αὐρ' ) 结果为 1 ,选择 CHARINDEX( N'αρ', N'αυρ') 结果为 0
标签: sql-server charindex