管理客户端/服务器代码页之间的数据转换

本主题介绍了当数据库不使用 Unicode 数据类型来存储字符数据时,以及当客户端交互数据的应用程序也不能识别 Unicode 时,如何保持字符数据的完整性。在这种情况下,数据存储的代码页和客户端应用程序的代码页必须相同。如果代码页不相同,则客户端和服务器之间的转化有可能导致某些字符丢失。

不支持通过禁用 SQL Server ODBC 驱动程序的 AutoTranslate 功能来插入由服务器上其他代码页定义的数据。而且,即使禁用了 AutoTranslate,也不能防止 SQL 语言事件进行代码页转换。其结果是,如果客户端和数据库的代码页不匹配,将对所有发往(或发自)服务器的非 Unicode 字符串进行代码页转换。

如果可以,应尽量避免这种情况发生。具有特殊代码页的服务器最好是仅和使用相同代码页的客户端通信。其次是使用另一种字符集大致相同的代码页。例如,代码页 1252 (Latin1) 和代码页 850 (Multilingual Latin1) 存储的字符集几乎完全相同,因此这两种代码页中的大部分字符可以相互转换而不会丢失数据。

如果您必须使用不同的代码页和客户端通信,则可采用的解决方案是将您的数据存储到 Unicode 列中。如果这些选项中有任何一个不可行,则替代方法是使用 binary、varbinary 或 varbinary(max) 数据类型,将数据存储在二进制列中。但是,二进制数据只能以二进制顺序来进行排序和比较。这使得它的灵活性不如字符数据。