Pri*_*moz 2 sql-server collation unicode
我们有一个带有 SQL Server 数据库的会计程序,并希望启动乌克兰版本。我不确定使用哪种排序规则:乌克兰语或Cyrillic_General?
对于非技术乌克兰语,我们比较了Cyrillic_general和乌克兰语的校对图表,发现表末尾只有细微的差异。那个人认为Cyrillic_general应该没问题。
此外,SQL Server 2012 不再列出乌克兰语排序规则。这是一个令人担忧的理由吗?
有什么建议可以选择吗?
首先,为了确保排序规则可用或不可用,您可以通过两种方式进行测试:
检查可用排序规则列表(即sys.fn_helpcollations())。在 SQL Server 2012 和 2014 中运行以下查询应返回 52 行:
SELECT * FROM sys.fn_helpcollations() WHERE [name] LIKE N'ukrain%';
Run Code Online (Sandbox Code Playgroud)尝试使用排序规则:
SELECT N'a' COLLATE Ukrainian_100_CI_AS;
Run Code Online (Sandbox Code Playgroud)
如果排序规则不可用,它会通知您 ;-)
接下来,我们应该看看排序规则是否按预期工作(最好不要完全信任文档,对 ;-) ?)。
要测试这两个排序规则,请运行以下命令:
DECLARE @CollationTest TABLE (Col1 NVARCHAR(5));
INSERT INTO @CollationTest (Col1) VALUES (N'?'), (N'?'), (N'?'), (N'?'), (N'?'), (N'?');
SELECT Col1 AS [Ukrainian_100_CS_AS]
FROM @CollationTest
ORDER BY Col1 COLLATE Ukrainian_100_CS_AS;
SELECT Col1 AS [Cyrillic_General_100_CS_AS]
FROM @CollationTest
ORDER BY Col1 COLLATE Cyrillic_General_100_CS_AS;
Run Code Online (Sandbox Code Playgroud)
结果:
Ukrainian_100_CS_AS
----------------------------
?
?
?
?
?
?
Cyrillic_General_100_CS_AS
----------------------------
?
?
?
?
?
?
Run Code Online (Sandbox Code Playgroud)
这两个排序至少与问题中链接的排序规则相匹配(考虑到这些排序规则图表是在 2009 年完成的,而这一_100系列排序规则是在 SQL Server 2008 中出现的,这是有道理的)。
唯一的区别似乎在于一个字符的初始排序顺序:? (大写字母软符号)。一个角色的位置是决定因素吗?您确实需要尽可能地反映客户的期望。但是,请记住,排序规则和初始排序多年来一直在变化。
以下是乌克兰语言环境的 Unicode 规范的一些示例。如您所见,两个放置都是正确的,尽管“当前”放置与西里尔文排序规则相匹配,而不是乌克兰文排序规则。特定于语言环境的数据的主要发布历史从这里开始:CLDR Releases/Downloads
http://www.unicode.org/repos/cldr/tags/release-1-4/posix/uk_UA.UTF-8.src (2006)
<CYRILLIC_CAPITAL_LETTER_SOFT_SIGN> <X5EF0>;<X0005>;<X008F>;IGNORE -- ?
<CYRILLIC_CAPITAL_LETTER_YA> <X5EFC>;<X0005>;<X008F>;IGNORE -- ?
http://www.unicode.org/repos/cldr/tags/release-1-9/posix/uk_UA.UTF-8.src (2010)
<CYRILLIC_CAPITAL_LETTER_YA> <X5D45>;<X05>;<X8F>;IGNORE -- ?
<CYRILLIC_CAPITAL_LETTER_SOFT_SIGN> <X5D46>;<X05>;<X86>;IGNORE -- ?
http://www.unicode.org/repos/cldr/tags/release-21/posix/uk_UA.UTF-8.src (2011)
<CYRILLIC_CAPITAL_LETTER_YA>
<X5D45>;<X05>;<X8F>;<CYRILLIC_CAPITAL_LETTER_YA> -- ?
<CYRILLIC_CAPITAL_LETTER_SOFT_SIGN>
<X5D46>;<X05>;<X86>;<CYRILLIC_CAPITAL_LETTER_SOFT_SIGN> -- ?
http://www.unicode.org/repos/cldr/tags/release-24/common/uca/allkeys_CLDR.txt (2013)
042C ; [.1B43.0020.0008.042C] # CYRILLIC CAPITAL LETTER SOFT SIGN -- ?
042F ; [.1B5E.0020.0008.042F] # CYRILLIC CAPITAL LETTER YA -- ?
http://www.unicode.org/repos/cldr/tags/release-27/common/uca/allkeys_CLDR.txt (2015)
042C ; [.1E56.0020.0008] # CYRILLIC CAPITAL LETTER SOFT SIGN -- ?
042F ; [.1E6D.0020.0008] # CYRILLIC CAPITAL LETTER YA -- ?
Run Code Online (Sandbox Code Playgroud)
公平地说,我们应该记住排序规则处理的不仅仅是排序。他们处理大小写、转换等。
那么应该怎么做呢?不管其余部分如何,最好选择您的客户最常用的区域设置作为其主要的 Windows 操作系统区域设置。这至少会为其他一切应该如何为他们运行提供一致的行为。运行以下命令在您的系统上查看:
SELECT os.os_language_version AS [WindowsLocale],
COLLATIONPROPERTY(N'Ukrainian_100_CS_AS', 'lcid') AS [SQLServerLocale-Ukrainian],
COLLATIONPROPERTY(N'Cyrillic_General_100_CS_AS', 'lcid') AS [SQLLocale-CyrillicGeneral]
FROM sys.dm_os_windows_info os;
Run Code Online (Sandbox Code Playgroud)
请尽可能多的客户/潜在客户检查他们的 Windows 设置,以便您可以进行相应的计划。
| 归档时间: |
|
| 查看次数: |
1846 次 |
| 最近记录: |