Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 12.0.0 (中文) » SQL Anywhere 服务器 - SQL 的用法 » 在数据库中使用 XML » 以 XML 格式获取查询结果 » 使用 FOR XML 子句以 XML 格式检索查询结果

 

对非法的 XML 名称编码

SQL Anywhere 在对不是合法 XML 名称的名称(例如,包括空格的列名)进行编码时会使用以下规则:

XML 的名称规则与 SQL 名称规则不同。例如,XML 名称中不允许使用空格。在将 SQL 名称(如列名)转换为 XML 名称时,对于 XML 名称无效的字符将被编码或转义。

对于每个被编码的字符,编码是基于字符的 Unicode 代码点值(以十六进制形式表示)进行的。

  • 对于大多数字符,可将代码点值表示为 16 位或 4 个十六进制数字(使用编码 _xHHHH_)。这些字符与 UTF-16 值为一个 16 位字的 Unicode 字符相对应。

  • 对于代码点值所需位数超过 16 位的字符,将在编码 _xHHHHHHHH_ 中使用 8 个十六进制数字。这些字符与 UTF-16 值为两个 16 位字的 Unicode 字符相对应。但 Unicode 代码点值(通常为 5 或 6 个十六进制数字)用于编码,而非 UTF-16 值。

    例如,以下查询包含带有空格的列名:

    SELECT EmployeeID AS "Employee ID"
    FROM Employees
    FOR XML RAW;

    返回以下结果:

    <row Employee_x0020_ID="102"/>
    <row Employee_x0020_ID="105"/>
    <row Employee_x0020_ID="129"/>
    <row Employee_x0020_ID="148"/>
    ...
  • 下划线 (_) 后如果跟有字符 x,就会被转义。例如,名称 Linu_x 将被编码为 Linu_x005F_x。

  • 冒号 (:) 不会被转义,这样,使用 FOR XML 查询就可以生成命名空间声明和限定的元素名和属性名。

有关 FOR XML 子句的语法信息,请参见SELECT 语句

提示

在 Interactive SQL 中执行包含 FOR XML 子句的查询时,您可能会需要通过设置 truncation_length 选项来增加列的长度。

有关设置截断长度的信息,请参见truncation_length 选项 [Interactive SQL]