Unicode 基础知识

当只使用字符数据和代码页时,在一个数据库内很难以多种语言存储数据。也很难为数据库找到一种能存储所有需要的语言特定字符的代码页。此外,当运行不同代码页的不同客户端读取和更新特殊字符时,很难保证正确转换这些字符。支持国际化客户端的数据库应始终使用 Unicode 数据,而不应使用非 Unicode 数据类型。

例如,有一个必须处理三种主要语言的北美洲客户的数据库:

  • 墨西哥使用的西班牙语名称和地址

  • 魁北克使用的法语名称和地址

  • 加拿大其余地区和美国使用的英语名称和地址

当只使用字符列和代码页时,必须小心以确保与数据库一起安装的代码页能处理所有这三种语言的字符。另外,还必须小心保证当运行某种语言的代码页的客户端读取另一种语言的字符时,能够正确转换字符。

随着 Internet 的发展,支持运行着不同区域设置的众多客户端计算机变得更加重要。但很难为支持世界范围的读者所需的所有字符的字符数据类型选择代码页。

在国际化数据库中管理字符数据最简单的方法是使用 Unicode nchar、nvarchar 和 nvarchar(max) 数据类型,而不是使用非 Unicode 等效项 char、varchar 和 text。

Unicode 是一种将码位映射到字符的标准。由于它的设计中涵盖世界上所有语言的全部字符,因此不需要不同的代码页来处理不同的字符集。SQL Server 支持 Unicode 标准 3.2 版。

如果所有使用国际化数据库的应用程序也采用 Unicode 变量而不是非 Unicode 变量,那么在系统中的任何地方都无需进行字符转换。客户端与所有其他客户端看到的数据中的字符相同。

SQL Server 将所有文字系统目录数据存储在包含 Unicode 数据类型的列中。数据库对象(如表、视图和存储过程)的名称存储在 Unicode 列中。这样就可以只使用 Unicode 来开发应用程序,从而有利于避免所有代码页转换问题。