首页 > 解决方案 > SQL Server 外来字符等于空字符串

问题描述

我们有一个查询在列中查找空值,但它返回的结果列不为空。

例如,此查询返回 true:

IF N'ការវិនិយោគបរទេស នៅជប៉ុន ធ្លាក់ចុះនៅឆ្នាំ២០១៧ នៅតែជាបញ្ហាធំបំផុត របស់ពិភពលោក' = N''
    PRINT 'true'
ELSE
    PRINT 'false';

我怀疑这可能是排序规则问题,但我尝试强制进行各种排序规则,结果仍然正确。

IF N'ការវិនិយោគបរទេស នៅជប៉ុន ធ្លាក់ចុះនៅឆ្នាំ២០១៧ នៅតែជាបញ្ហាធំបំផុត របស់ពិភពលោក' = N'' COLLATE Arabic_CI_AI
    PRINT 'true'
ELSE
    PRINT 'false';

标签: sqlsql-serverunicode

解决方案


您要比较的文本似乎是高棉语,而不是阿拉伯语,因此您应该使用Khmer_100_*排序规则。

看看这个 TSQL 片段

declare @coll table (
    name nvarchar(50),
    khmerSupported bit
)

declare @text nvarchar(200) = N'ការវិនិយោគបរទេស នៅជប៉ុន ធ្លាក់ចុះនៅឆ្នាំ២០១៧ នៅតែជាបញ្ហាធំបំផុត របស់ពិភពលោក'

declare @name nvarchar(50), @sql nvarchar(500)

declare c cursor for 
select name from sys.fn_helpcollations()
where name like 'khm%'

open c

fetch c into @name
while @@fetch_status = 0 begin

set @sql = 'select ''' + @name + ''', case when @text = N'''' COLLATE ' + @name + ' then 0 else 1 end'
print @sql
    insert into @coll (name, khmerSupported)
    exec sp_executesql @sql, N'@text NVARCHAR(200)', @text=@text

    fetch c into @name
end

close c
deallocate c

select Name, KhmerSupported from @coll

并尝试排序规则查询。

用于select Name, KhmerSupported from @coll where KhmerSupported=1查找支持高棉比较的所有排序规则。


推荐阅读