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

文章翻译 文章翻译
文章编号: 232580 - 查看本文应用于的产品
展开全部 | 关闭全部

概要

某些应用程序 (尤其是基于 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. 如果您的应用程序使用活动服务器页面 (ASP),并且您正在使用 Internet 信息服务器 (IIS) 5.0 和 Microsoft Windows 2000 您可以将"< %Session.Codepage=65001 %>"添加到您的服务器端 ASP 脚本。这指示 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 协会的网站:

    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. 使用 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 是仅有的选项。

属性

文章编号: 232580 - 最后修改: 2005年12月7日 - 修订: 4.4
这篇文章中的信息适用于:
  • 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
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。

提供反馈

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com