编码情况:将外部编码的 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。
丢失数据:不会丢失数据。
截断:不会截断数据。