组合字符映射到排序元素的方式取决于 Unicode 标准和排序规则这两者。某些组合字符始终被视为等同于它们的变体形式,无论它们包括多少不同的码位(例如,拉丁文字母加音调符号被视为等同于包括音调符号的预构成字符),而在某些排序规则中,可以根据音调符号是否存在以不同方式对字符串进行排序或比较。
组合字符最初是在 Unicode 2.0 中定义的。有关详细信息,请参阅论述“特殊区域和格式字符”的 Unicode 4.0.1 规范部分。Unicode Consortium 还发布了专门针对组合字符及其处理的 FAQ。有关在 .NET Framework 中处理组合字符的方法的详细信息,请参阅《.NET Framework 开发人员指南》中的标准化。
对 GB18030 的支持
GB18030 (GB18030-2000) 是中华人民共和国 (PRC) 颁布的一项针对中文字符编码的独立标准。它对扩展代码页和与 Unicode 的映射表都做了规定。官方要求从 2006 年 8 月 1 日起,在 PRC 境内销售的所有软件产品都必须支持此字符集。GB18030 一致性包括对支持一些以前并不支持的语言(例如,藏文、蒙文、彝文和维吾尔文)的要求。
在 GB18030 中,字符可以是 1、2 或 4 个字节。代理项对用于支持 GB18030 的 4 字节序列与 Unicode 的映射。 SQL Server 2005 通过在采用 GB18030 编码的字符从客户端应用程序进入服务器时对它们进行识别来提供对这些字符的支持。SQL Server 2005 会在本地对这些字符进行转换,并将它们存储为 Unicode 字符。这些字符存储在服务器中后,在对它们执行的所有后续操作中均将它们视为 Unicode 字符。GB18030 不具有系统区域设置;它只有一个代码页标识符,以实现与 Unicode 之间的相互转换。Microsoft 针对 GB18030-2000 的代码页标识符为 54936。
使用 GB18030 字符时,请记住这些字符可以在排序和比较操作中使用,但如果使用的是 SQL Server 90 之前的排序规则,将只能基于这些字符的码位而不能基于其他有语言意义的方式进行比较。因此,在 ORDER BY、GROUP BY 和 DISTINCT 等操作中使用 GB18030 字符时,尤其是在同一操作中同时包括 GB18030 字符和非 GB18030 字符时,应谨慎行事。要支持有意义的使用 GB18030 字符的字符串比较,请使用新的 SQL Server 90 排序规则版本(以添加到其名称中的 90 后缀表示)。例如,请使用 Chinese_PRC_90 排序规则,而不使用 Chinese_PRC 排序规则。
要启用对 GB18030 标准的支持,可以安装一个支持软件包,该软件包可以从 Microsoft 产品帮助和支持门户下载,其中包括支持 GB18030 与 Unicode 之间转换所需的字体文件和库。该支持软件包是一个可以在 Windows XP 或 Windows 2000 上安装的单一全球二进制。不过,系统必须安装可选的东亚语言支持。Windows Vista 中包括了对 GB18030 标准的支持,其中包括针对中国少数民族语言(如藏文、蒙文、彝文和维吾尔文)的字体和键盘布局。这些语言均使用中文 (PRC) 区域设置。
注意Vista 中不支持某些将 GB18030 字节转换为 Unicode 字符的函数,如 BytesToUnicode。在 Vista 中将 GB18030 字节转换为 Unicode 字符时,请使用 MultiByteToWideChar 函数。