现在的位置: 首页 > 综合 > 正文

将 utf-8 数据存储在 SQL Server 中的说明

2013年10月18日 ⁄ 综合 ⁄ 共 1914字 ⁄ 字号 评论关闭

将 utf-8 数据存储在 SQL Server 中的说明

文章编号: 232580 - 查看本文应用于的产品

概要

某些应用程序 (尤其是基于 Web 的那些) 必须用 utf-8 编码方法进行编码的 Unicode 数据处理。SQL Server 7.0 和 SQL Server 2000年使用不同的 Unicode 编码 (UCS-2),并不能作为有效的字符数据识别
utf-8。
本文将讨论几种处理这种情况的。

更多信息

Unicode 数据可以在许多不同的方法进行编码。Ucs-2,utf-8 是两种常用方法来存储表示 Unicode 字符的位模式。Microsoft Windows
NT,SQL Server、 Java、 COM 和 SQL Server ODBC 驱动程序和 OLEDB 提供程序所有内部 Unicode 数据表示为 ucs-2。

使用 SQL Server 7.0 或 SQL Server 2000年为后端服务器的应用程序发送和接收以 utf-8 编码的 Unicode 数据的选项包括:

  1. 如果您的应用程序使用 Active Server Pages (ASP),并且您使用的 Internet 信息服务器 (IIS) 5.0 和 Microsoft Windows 2000,您可以添加到 ASP 服务器端脚本的"< %session.codepage=65001%>"。这会指示
    IIS 将所有动态生成的字符串转换 (示例: Response.Write) 从 ucs-2 为 utf-8 之前自动将它们发送到客户端。

    如果您不想启用会话,您也可以使用服务器端指令"< @ 当前系统 ansi 代码页的代码页 %= 65001%>"。

    通过 GET 或 POST 服务器从客户端发送任何 utf-8 数据是也将转换为 ucs-2 自动。 Session.Codepage 属性是推荐的方法来处理 utf-8 web 应用程序中的数据。 此代码页设置不是 IIS 4.0 和 Windows NT 4.0 上可用的。其他的信息,请参阅下面 Microsoft 知识库中相应的文章:

    254313错误消息: 活动服务器页面错误 ASP 0203' 无效代码
  2. 根据需要在应用程序中转换从 ucs-2 或 utf-8。为此类型的转换的代码示例位于 Unicode 协会的网站:

    备注对于 Internet 请求文档 RFC2279 中找不到将转换为 utf-8 的 ucs-2 算法的高级别描述。

    在 Windows NT 或 Windows 2000,您可以将 utf-8 通过传递常量 CP_UTF8 与 ucs-2 转换使用 Win32 函数MultiByteToWideChar 和 WideCharToMultiByte (65001) 作为函数的第一个参数。

  3. 修改的 utf-8 编码而不是使用 ucs-2 应用程序。
  4. 使用 BINARY/VARBINARY/IMAGE 列,在服务器上存储实际的 utf-8 数据。将 utf-8 数据存储在 SQL Server 意味着您可以不使用 SQL Server 排序或查找这些值的范围,数据好像有效字符数据。类型的操作包含 utf-8 数据不会返回预期的结果包括"ORDER BY",更大的列上-比">"和更少的-比"<"比较,和如 SUBSTRING() 内置 SQL Server
    字符串操作函数。

    但是,相等比较将起作用,只要被比较字符串的等效字节的级别。请注意是否您将 utf-8 数据存储在 SQL Server 您不应使用字符列 (CHAR/NCHAR/VARCHAR 等)。utf-8 是无效的字符数据 SQL Server,并将非字符数据存储在字符列,则有可能遇到问题,如下面的 Microsoft 知识库文章中讨论的问题:

    155723INF: SQL Server 截断的 DBCS 字符串
    234748PRB: SQL Server ODBC 驱动程序到 Unicode
    转换语言事件

    如果您正在考虑此的选项请记住如果您需要访问存储在 SQL Server 内从 Web 浏览器 (例如对于从非基于 Web 的 ODBC 应用程序) 以外的其他任何应用程序的 utf-8 数据您将需要执行从 utf-8 到转换 ucs-2 ODBC、 OLEDB、 COM,作为该应用程序中的 Win32 API 调用、 VB 和 C 运行时字符串的处理函数不能使用 utf-8 数据。这样会将移动到不同的应用程序的转换的负担。

  5. 如果您的要求不包括需要存储数据的组合,由单个代码页不满意的语言,您可能不需要使用 Unicode。

引入 Unicode 支持的目的是为了 SQL Server 开头 SQL Server 7.0。由于 SQL Server 6.5 不支持 Unicode 数据的存储,第 4 步和第 5 步中概述了为 SQL Server 6.5 是仅有的选项。

抱歉!评论已关闭.