Help and Support

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

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

展开全部 | 关闭全部

概要

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

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

    任何 UTF-8 数据从客户端发送到通过 GET 或 POST 服务器是还转换为 UCS-2 自动。 session.codepage 属性是推荐的方法来处理在 Web 应用程序中的 UTF-8 数据。 此代码页设置不 IIS 4.0 和 Windows NT 4.0 上可用。 有关其他信息,请参见在以下文章的 Microsoft 知识库文章:
    254313? (http://support.microsoft.com/kb/254313/EN-US/ ) 错误信息: Active Server 页错误 ASP 0203 无效的代码
  2. 根据应用程序中转换从 UCS-2 或 UTF-8。 这种转换的示例代码位于 Unicode 联合会网站:

    ftp://ftp.unicode.org/Public/PROGRAMS/CVTUTF/ (ftp://ftp.unicode.org/Public/PROGRAMS/CVTUTF/)
    要将 UCS-2 转换为 UTF-8 算法的高级别描述可以找到批注文档 RFC2279 的 Internet 请求中。

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

    但是,相等的比较将工作只要字节级别进行比较的字符串是等效。 请注意是否在将 UTF-8 数据存储在 SQL Server 您应不使用字符列 (CHAR/NCHAR / VARCHAR 等)。 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 数据的存储,SQL Server 6.5 唯一选项被概括步骤 4 和步骤 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和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。

文章翻译