【问题标题】:SQL Server 2008: Collation for UTF-8 code page 65001SQL Server 2008:UTF-8 代码页 65001 的排序规则
【发布时间】:2011-09-28 15:15:03
【问题描述】:

需要以 UTF-8 编码保存 XML,然后在 T-SQL 代码中使用它来提取数据。

默认数据库排序规则是 SQL_Latin1_General_CP1_CI_AS。

我不知道是否可以在 SQL Server 2008 中保存和使用 UTF-8 数据,但我有一个想法,可以按顺序在 XML 列上使用带有 UTF-8 (65001) 代码页的排序规则以 UTF-8 格式保存数据。

有人知道这是否可行或对如何在 SQL Server 中处理 UTF-8 数据有其他想法吗?

【问题讨论】:

  • 没有必要以 UTF-8 存储数据。用于 xml 列的 UTF-16 非常好。当数据通过附加层(在我的例子中是 Java)提供给外部时,它可能总是被转换为 UTF-8。

标签: sql-server xml sql-server-2008 utf-8 collation


【解决方案1】:

如果您正在处理 xml 数据,请将其存储为 xml 数据类型。这应该可以解决您的任何顾虑(即如何存储它),并且您可以省去在处理它时必须将其转换为 xml 的工作(例如 xpath 表达式、xquery 等)。

【讨论】:

    【解决方案2】:

    您可以将所有 Unicode 字符存储在 xmlnvarchar 列中。您使用什么排序规则并不重要。少数稀有汉字(来自补充平面)可以存储为成对的nchars(代理对)。但是没有数据丢失。

    【讨论】:

      【解决方案3】:

      NVARCHAR 专栏应该可以很好地完成这项工作。

      【讨论】:

      • 以 UCS-2 编码而不是 UTF-8 向客户端返回结果如何?
      • 如果使用 NVARCHAR 存储 XML,您的 XML 必须包含 UTF-16 BOM 内容或具有 encoding="utf-16"(并且可能未指定任何非等效编码)。如果您不这样做,您可能会遇到一些问题,包括 SQL Server 自己的内置 XML 解析内容阻塞 XML。
      猜你喜欢
      • 2012-11-11
      • 2021-02-16
      • 2011-05-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-10
      • 2015-07-28
      • 1970-01-01
      相关资源
      最近更新 更多