将 utf-8 数据存储在 SQL Server 中的说明
2013-08-26 16:13
204 查看
将 utf-8 数据存储在 SQL Server 中的说明
文章编号: 232580 - 查看本文应用于的产品查看机器翻译免责声明
Microsoft
支持页面的机器翻译
展开全部 | 关闭全部
概要
某些应用程序 (尤其是基于 Web 的那些) 必须用 utf-8 编码方法进行编码的 Unicode 数据处理。SQL Server 7.0 和 SQL Server 2000年使用不同的 Unicode 编码 (UCS-2),并不能作为有效的字符数据识别utf-8。本文将讨论几种处理这种情况的。
更多信息
Unicode 数据可以在许多不同的方法进行编码。Ucs-2,utf-8 是两种常用方法来存储表示 Unicode 字符的位模式。Microsoft WindowsNT,SQL Server、 Java、 COM 和 SQL Server ODBC 驱动程序和 OLEDB 提供程序所有内部 Unicode 数据表示为 ucs-2。
使用 SQL Server 7.0 或 SQL Server 2000年为后端服务器的应用程序发送和接收以 utf-8 编码的 Unicode 数据的选项包括:
如果您的应用程序使用 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' 无效代码
根据需要在应用程序中转换从 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 函数MultiByteToWideChar 和 WideCharToMultiByte (65001) 作为函数的第一个参数。
修改的 utf-8 编码而不是使用 ucs-2 应用程序。
使用 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 数据。这样会将移动到不同的应用程序的转换的负担。
如果您的要求不包括需要存储数据的组合,由单个代码页不满意的语言,您可能不需要使用 Unicode。
引入 Unicode 支持的目的是为了 SQL Server 开头 SQL Server 7.0。由于 SQL Server 6.5 不支持 Unicode 数据的存储,第 4 步和第 5 步中概述了为 SQL Server 6.5 是仅有的选项。
相关文章推荐
- Sql Server 删除数据表的存储过程,直接能用!(源码带说明)
- SQL Server 2005 int与datetime数据类型的存储结构说明
- [摘]关于SQL Server中存储字符数据的相关说明
- SQL Server 2005 int与datetime数据类型的存储结构说明
- SQL Server 2008空间数据应用系列八:基于Bing Maps(Silverlight)的空间数据存储
- sql server 2000 数据对象的最大容量说明
- Unity5.4 Assetbundles官方说明七(在AssetBundle中存储和加载二进制数据)
- SDE数据存储说明
- Asp.net中把Excel数据存储至SQL Server中
- SQL Server 2008 空间数据存储摘抄(SRID 点 MultiPoint LineString MultiLineString 多边形 MultiPolygon GeometryCollection)
- SQL Server大数据表的分区存储
- 以UTF-8编码方式讲数据存储的编码
- VB.NET、EXCEL调用SQL Server带参数的存储过程并返回数据集
- SQL SERVER 2005页面存储之--特殊数据类型在页面中的存储
- SQL Server对图像数据的存储机制介绍
- SQL SERVER 2005页面存储之--表的数据行在页中的存储
- Sql Server 存储过程中查询数据无法使用 Union(All)
- C#下把txt文件数据读进sql server中存储所遇到的乱码问题
- SQL Server存储引擎 - 04. 数据
- 基于SQL Server 2005 Compact Edition的数据存储