SQL Server 2017 特殊字符(夏威夷语“Okina”)的排序规则导致“?”字符串行为

SQL Server 2017 Collation for special character (Hawaiian 'Okina) leads to "?" string behavior

我需要插入一些夏威夷语 'Okina 字符串名称作为 'Kapiʻolani';但是,在 SQL Server 2017 数据库中,它显示为 Kapi?olani 并带有问号。

我做了一些研究并尝试这样 :

CREATE TABLE Organization3 (Name NVARCHAR(250) COLLATE Japanese_XJIS_140_BIN2); 

插入值后:

INSERT INTO Organization3 
      ([Name])
      values
      ('Kapi''olani')
update unicas_config.dbo.Organization3  set Name = 'Kapiʻolani'

还是这样显示:Kapi?olani(带问号)

有没有办法让它正确显示?非常感谢

您应该使用 N 前缀(即 N'Kapiʻolani')来指定它是一个 Unicode 字符串(正如评论中已经指出的那样)。

排序规则仅对排序和比较(以及进行比较以执行其任务的字符串相关函数)很重要。

例如下面SELECT-s return个不同的结果:

CREATE TABLE #t (x NVARCHAR(100))
INSERT INTO #t VALUES (N'Kapiʻolani'),(N'KAPIʻOLANI'),(N'Kapi''olani'),(N'Kapiolani'),(N'Kapi olani')

SELECT DENSE_RANK() OVER (ORDER BY x COLLATE Latin1_General_100_CI_AI), * FROM #t ORDER BY 1
SELECT DENSE_RANK() OVER (ORDER BY x COLLATE Latin1_General_100_CI_AS), * FROM #t ORDER BY 1
SELECT DENSE_RANK() OVER (ORDER BY x COLLATE Latin1_General_100_CS_AI), * FROM #t ORDER BY 1
SELECT DENSE_RANK() OVER (ORDER BY x COLLATE Latin1_General_100_CS_AS), * FROM #t ORDER BY 1
SELECT DENSE_RANK() OVER (ORDER BY x COLLATE Latin1_General_100_BIN), * FROM #t ORDER BY 1

DROP TABLE #t

使用 return 您期望的数据的排序规则。