文章编号: 232580 - 最后修改: 2005年12月7日 - 修订: 4.4

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

展开全部 | 关闭全部

概要

某些应用程序 (尤其是那些基于 Web) 必须处理编码与 UTF-8 编码方法的 Unicode 数据。 SQL Server 7.0 和 2000 SQL Server 使用不同的 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. 如果您的应用程序使用活动服务器页 (ASP),并且您正在使用 Internet 信息服务器 (IIS) 5.0 和 Microsoft Windows 2000 可以将"< %Session.Codepage=65001 %>"添加到您的服务器端 ASP 脚本。 这指示 IIS 将转换动态生成的所有字符串 (示例: Response.Write) UCS-2 以 UTF-8 发送到客户端之前会自动从。

    如果不希望启用会话,您或者可以使用服务器端指令"< %@ 代码页 65001%= >"。

    从客户端发送到服务器通过 GET 或 POST 任何 UTF-8 数据是也会自动转换为 UCS-2 中。 Session.Codepage 属性是推荐的方法以处理 UTF-8 web 应用程序内的数据。 此代码页设置 IIS 4.0 和 Windows NT 4.0 上不可用。 有关其他信息,请参阅以下 Microsoft 知识库中文章:
    254313? (http://support.microsoft.com/kb/254313/EN-US/ ) 鍑虹幇閿欒淇 ℃ 伅锛活动服务器页面错误 ASP 0203' 无效代码
  2. 应用程序内相应地翻译和从 UCS-2 或 UTF-8。 为此类型的转换的代码示例所处的 Unicode 协会网站:

    ftp://ftp.unicode.org/Public/PROGRAMS/CVTUTF/ (ftp://ftp.unicode.org/Public/PROGRAMS/CVTUTF/)
    备注对于 Internet 申请文档 RFC2279 中找不到要转换为 UTF-8 的 UCS-2 算法的高级别描述。

    在 Windows NT 或 Windows 2000,您可能将 UTF-8 通过传递常量 CP_UTF8 与 UCS-2 转换使用 Win32 函数 MultiByteToWideCharWideCharToMultiByte (65001) 作为该函数使用第一个参数。
  3. 修改的 UTF-8 编码而不是使用 UCS-2 应用程序。
  4. 使用图像-二进制/VARBINARY 列在服务器上存储实际的 UTF-8 数据。 在 SQL Server 中存储 UTF-8 数据意味着您可以不使用 SQL Server 来排序或查找这些值的范围,数据好像有效字符数据。 该类型的操作在包含 UTF-8 数据不会返回预期的结果包括"ORDER BY",更大的列上-比">"和更少-比"<"比较,和 SUBSTRING() 如在内置 SQL Server 字符串操作函数。

    但是,相等比较将按被比较字符串是等效的字节级别上工作。 请注意是否您在 SQL Server 中存储 UTF-8 数据不应使用字符列 (VARCHAR-CHAR/NCHAR 等等)。 UTF-8 是无效的字符数据 SQL Server,并通过将非字符数据存储在字符列,则有可能遇到问题,如下面的 Microsoft 知识库文章中讨论的问题:
    155723? (http://support.microsoft.com/kb/155723/EN-US/ ) INF: SQL Server 截断的 DBCS 字符串
    234748? (http://support.microsoft.com/kb/234748/EN-US/ ) PRB: 则 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 唯一的选项。

这篇文章中的信息适用于:
  • Microsoft SQL Server 2000 标准版
  • Microsoft SQL Server 6.5 标准版
  • Microsoft SQL Server 7.0 标准版
  • Microsoft SQL Server 2005 Standard Edition
  • Microsoft SQL Server 2005 Express Edition
  • Microsoft SQL Server 2005 Developer Edition
  • Microsoft SQL 2005 Server Enterprise
  • Microsoft SQL 2005 Server Workgroup
关键字:?
kbmt kbinfo KB232580 KbMtzh
机器翻译机器翻译
注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。
点击这里察看该文章的英文版: 232580? (http://support.microsoft.com/kb/232580/en-us/ )
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。
 

文章翻译