非 Unicode 数据库中的 XML
2009-11-28 00:00:00 来源:WEB开发网什么东西要经过转换?
图 1. 转换过程的例子
每当从 DB2 客户机发生任何请求到 DB2 服务器,所有字符数据(例如查询或 CHAR 主机变量)都要从客户机代码页转换为数据库代码页。不管请求中是否牵涉到 XML,这个过程都会发生。
查询的 XML 部分被转换到 XML 世界,以便 XML 解析器进行解析以及 XML 值的输出(串行化)。结果则被转换到 SQL 世界。这两个转换都可能引入替换字符,即当目标代码页不能呈现代码点时插入到字符流中的替换代码点。替换字符会导致服务器上损失数据完整性。本文将寻找避免替换字符的方法。
SQL 查询的结果和串行化 XML 在传回客户机之前被转换到 SQL 世界。在这个时候,如果串行化 XML 包含数据库代码页中不能表示的字符,或者在客户机代码页中不能表示的字符,就可能引入替换字符。下面讨论避免这两种替换字符陷阱的方法。
插入 XML 文档
至此,您已经知道了数据如何转换到正确的代码页,那么,这对于插入 XML 文档有何影响呢?为了将一个 XML 文档插入到表中,可以使用一个包含 XML 数据的字符串:
清单 7. 包含 XML 数据的字符串
INSERT INTO xmlbookcat VALUES
(0451526562, XMLPARSE (DOCUMENT '<?xml version="1.0" encoding="ISO-8859-1" ?>
<book>
<title> A Tale of Two Cities </title>
<author>
<firstname> Charles </firstname>
<lastname> Dickens </lastname>
</author>
<publisher> Signet Classics </publisher>
<date> 7/1/1997 </date>
<keyword> London </keyword>
<keyword> Sydney Carton </keyword>
<keyword> Paris </keyword>
<first_para> It was the best of times, it was the worst of times </first_para>
|-------10--------20--------30--------40--------50--------60--------70--------80--------9|
|-------- XML error: The previous line is longer than the max of 90 characters ---------|
<ISBN> 0451526562 </ISBN>
</book>'));
更多精彩
赞助商链接