当Oracle将XML存储为二进制数据时,它将在没有XML标记的情况下存储。 我们在这里可以看到:Oracle Patent
这种机制允许Oracle在存储XML数据时消耗更少的内存。
我想知道PostgreSQL如何存储其XML数据。 我找到了这个文档,其中说内部Postgre将通过UTF-8将XML作为字符串处理(如果它被配置为通过另一个标准处理数据,许多函数不起作用):Postgre Documentation
我没有找到任何能说明Postgre如何存储其二进制XML数据的内容...... 由于它没有通过DTD(Postgre Documentation)验证XML输入数据,我认为它确实存储了所有文档的所有XML标记。
有没有人确切知道或者有更准确的引用说明Postgre如何存储XML数据? - 如果它没有像Oracle这样的标签存储,或者存储了所有文档的所有XML标签。
提前致谢...
答案 0 :(得分:3)
存储为UTF-8字符串。
摘自来源:
/*
* Parse the data to check if it is well-formed XML data. Assume that
* xml_parse will throw ERROR if not.
*/
doc = xml_parse(result, xmloption, true, encoding);
xmlFreeDoc(doc);
/* Now that we know what we're dealing with, convert to server encoding */
newstr = pg_any_to_server(str, nbytes, encoding);
基本上postgres检查xml字符串是否有效,然后按原样存储它。
来自pg_any_to_server:
/*
* Convert any encoding to server encoding.
*
* See the notes about string conversion functions at the top of this file.
*
* Unlike the other string conversion functions, this will apply validation
* even if encoding == DatabaseEncoding->encoding. This is because this is
* used to process data coming in from outside the database, and we never
* want to just assume validity.
*/
char *
pg_any_to_server(const char *s, int len, int encoding)
{
因此,它被格式化为UTF-8字符串,然后像postgres一样存储,就像任何字符串一样。