使用 Unicode 数据

Unicode 规格为全球商业领域中广泛使用的大部分字符定义了一个单一编码方案。所有的计算机都用单一的 Unicode 规格将 Unicode 数据中的位模式一致地转换成字符。这保证了同一个位模式在所有的计算机上总是转换成同一个字符。数据可以随意地从一个数据库或计算机传送到另一个数据库或计算机,而不用担心接收系统是否会错误地转换位模式。

对于用一个字节编码每个字符的数据类型,存在的问题之一就是此数据类型只能表示 256 个不同的字符。这就迫使对于不同的字母表(例如相对较小的欧洲字母表)采用多种编码规格或代码页。而且,也不可能处理像日文汉字或韩国文字这样具有上千个字符的字母表。

每个 MicrosoftSQL Server 排序规则都有一个代码页,该代码页定义表示 char、varchar 和 text 值中每个字符的位模式。可为个别的列和字符常量分配不同的代码页。客户端计算机使用与操作系统区域设置相关联的代码页解释字符位模式。有许多不同的代码页,并且某些代码页上出现一些字符,而另一些代码页上没有。某些字符在一些代码页上用一种位模式定义,而在其他代码页上却用另一种位模式定义。在设计必须处理不同语言的国际化系统时,为需要满足多个国家和地区的语言要求的所有计算机选取代码页将变得非常困难。要确保每台计算机与使用不同代码页的系统交互时都执行正确的转换也很困难。

Unicode 规格通过采用两个字节编码每个字符使这个问题迎刃而解。转换最通用商业语言的单一规格具有足够多的 2 字节的模式 (65,536)。因为所有的 Unicode 系统均一致地采用同样的位模式来表示所有的字符,所以当从一个系统转到另一个系统时,将不会存在未正确转换字符的问题。通过在整个系统中使用 Unicode 数据类型,可尽量减少字符转换问题。

在 SQL Server 中,下列数据类型支持 Unicode 数据:

  • nchar

  • nvarchar

  • ntext

    注意注意

    这些数据类型中的前缀 n 来自 ISO 标准的 National (Unicode) 数据类型。

除下列情况之外,nchar、nvarchar 和 ntext 的使用分别与 char、varchar 和 text 的使用相同:

  • Unicode 支持更大范围的字符。

  • 存储 Unicode 字符需要更大的空间。

  • nchar 列的最大大小为 4,000 个字符,与 char 和 varchar 不同,它们为 8,000 个字符。

  • 使用最大说明符,nvarchar 列的最大大小为 2^31-1 字节。有关 nvarchar(max) 的详细信息,请参阅使用大值数据类型

  • Unicode 常量以 N 开头指定:N'A Unicode string'。

  • 所有 Unicode 数据使用由 Unicode 标准定义的字符集。用于 Unicode 列的 Unicode 排序规则以下列属性为基础:区分大小写、区分重音、区分假名、区分全半角和二进制。