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 您期望的数据的排序规则。
我需要插入一些夏威夷语 '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 您期望的数据的排序规则。