越南语整理中的“tR”似乎有一些特别之处。了解它的人是否可以简单地解释一下。这个问题是在我们的产品安装在“越南语”整理的 SQL Server 上时发现的。架构中的一个表的名称中包含“tR”,但存储过程正在引用所有小写“tr”的表。这个参考失败了。
我猜这种情况类似于其他排序规则中的'阝'匹配'ss'。
这是一个复制品:
select case when 'tr' = 'tR' COLLATE SQL_Latin1_General_CP1_CI_AS then 'match' else 'no match' end
select case when 'tr' = 'tR' COLLATE Vietnamese_CI_AI then 'match' else 'no match' end
select case when 'tr' = 'TR' COLLATE Vietnamese_CI_AI then 'match' else 'no match' end
结果:
-----
match
--------
no match
-----
match
第二个 T-SQL 产生不匹配。't' 和 'R' 的其他组合没有。
鉴于此行为存在于该排序规则的较新版本中,并且诸如“fr”和“fR”之类的组合确实匹配(如预期的那样),它只能是该字符组合的特定于文化的语言规则。
我在排序权重文件中找到了规则**。特殊的是“tr”的组合(越南语),而不是“tR”。越南语似乎有某些字母组合组合成一个字符,例如西班牙语中的“CH”和“LL”组合。因此,以下是“T”+“R”组合形成越南语的“字符”的有效组合:
“tR”的组合不形成“TR”字符,很可能是因为这是一种不自然的大写,更意味着单词的分离,例如使用 Pascal / Camel 大小写(例如“Cha tR oom”和“cha tR oom”,分别与“ tR ogdor the Burninator ”相对(我有根据的猜测)。
以下示例显示“tr”组合在“tz”之后排序:
这些结果是由于“tr”组合形成一个自然排序在“t”之后的单个字符。意思是,排序算法看到以下内容:
越南语还有其他两个字母组合,其工作方式与“TR”相同(即不区分大小写:)
tr == Tr == TR <> tR
:有关使用排序规则/编码/Unicode 的更多信息,请访问我的网站:排序规则信息
**排序权重文件包含代码点及其各自的权重值,这些权重值分为不同的类别,例如变音符号权重、案例权重等。通常有描述转换的部分,例如将两个代码点组合为单个权重特定的文化/地区(例如越南语)。可以有将预先组合的字符分解为单个字符等的映射。请参阅:访问 Windows 排序权重表。
注意: Microsoft 提供了多个分类权重文件,因为这些文件多年来随着新版本 Windows 和 Windows Server 的发布而更新。请记住,这些文件都不是 100% 匹配 SQL Server 使用的规则。我们得到的最接近的是Windows Server 2008 Sorting Weight Table.txt文件,它应该与版本 100 排序规则(即
_100_
名称中带有的排序规则)的行为非常匹配。