编码情况:将外部编码的 XML 数据输入到数据库中

通常,当您使用字符应用程序数据类型时,在向数据库输入数据时不会出现代码页转换问题。

以下示例说明了在将XML数据输入到XML列时,外部编码如何影响数据转换和截断。

只有方案1和方案2适用于Java™和.NET应用程序,因为Java和.NET应用程序的代码页始终是Unicode。

场景 1

编码源
数据编码 UTF-8 Unicode输入数据, 有或没有适当的编码声明或BOM
应用程序数据类型 字符
应用程序代码页 1208 (UTF-8)
输入语句示例:
INSERT INTO T1 (XMLCOL) VALUES (?)
INSERT INTO T1 (XMLCOL) VALUES 
  (XMLPARSE(DOCUMENT CAST(? AS CLOB) PRESERVE WHITESPACE))
INSERT INTO T1 (XMLCOL) VALUES (XMLPARSE(DOCUMENT :HV))

字符转换:不进行字符转换。

丢失数据:不会丢失数据。

截断:不会截断数据。

场景 2

编码源
数据编码 UTF-16 Unicode输入数据, 有或没有适当的编码声明或BOM
应用程序数据类型 图形
应用程序代码页 任何 SBCS 代码页或 CCSID 1208
输入语句示例:
INSERT INTO T1 (XMLCOL) VALUES (?)
INSERT INTO T1 (XMLCOL) VALUES 
  (XMLPARSE(DOCUMENT CAST(? AS DBCLOB) PRESERVE WHITESPACE))
INSERT INTO T1 (XMLCOL) VALUES (XMLPARSE(DOCUMENT :HV))

字符转换 :当 Db2 数据库系统执行XML解析以存储在XML列中时,会将数据从 UTF-16 转换为 UTF-8。

丢失数据:不会丢失数据。

截断:由于会进行扩展,所以在从 UTF-16 转换为 UTF-8 期间可能会发生截断。

场景 3

编码源
数据编码 ISO-8859-1 输入数据, 无论是否带有适当的编码声明
应用程序数据类型 字符
应用程序代码页 819
输入语句示例:
INSERT INTO T1 (XMLCOL) VALUES (?)
INSERT INTO T1 (XMLCOL) VALUES 
  (XMLPARSE(DOCUMENT CAST(? AS CLOB) PRESERVE WHITESPACE))
INSERT INTO T1 (XMLCOL) VALUES (XMLPARSE(DOCUMENT :HV))

字符转换 :当 Db2 数据库系统执行XML解析以存储在XML列中时,会将数据从CCSID 819转换为 UTF-8。

丢失数据:不会丢失数据。

截断:不会截断数据。

场景 4

编码源
数据编码 Shift_JIS 输入数据, 带或不带适当的编码声明
应用程序数据类型 图形
应用程序代码页 943
输入语句示例:
INSERT INTO T1 VALUES (?)
INSERT INTO T1 VALUES 
  (XMLPARSE(DOCUMENT CAST(? AS DBCLOB)))
INSERT INTO T1 VALUES (XMLPARSE(DOCUMENT :HV))

字符转换 :当 Db2 数据库系统执行XML解析以存储在XML列中时,会将数据从CCSID 943转换为 UTF-8。

丢失数据:不会丢失数据。

截断:不会截断数据。