PostgreSQL:无法在blob中保存特殊字符(区域语言)

时间:2013-09-17 11:55:10

标签: database postgresql blob special-characters bytea

我正在使用PostgreSQL 9.0并尝试存储包含某些特殊字符(区域语言字符 - UTF8编码)的bytea文件。但我无法将数据存储为用户输入。

例如:

调试时我收到的内容<sp_first_name_gu name="sp_first_name_gu" value="ઍયેઍ"></sp_first_name_gu><sp_first_name name="sp_first_name" value="aaa"></sp_first_name>

这是存储在DB 中的内容: <sp_first_name_gu name="sp_first_name_gu" value="\340\252\215\340\252\257\340\253\207\340\252\215"></sp_first_name_gu><sp_first_name name="sp_first_name" value="aaa"></sp_first_name>

请注意值标记的差异。有了这个问题,我无法检索用户输入的正确文本。 请建议我需要做什么?

PS:我的数据库是UTF8编码的。

2 个答案:

答案 0 :(得分:1)

值正确存储,但在检索时会转义为八进制转义序列。

要解决此问题 - 更改数据库驱动程序的设置或为bytea选择不同的编码/转义。

或者只为XML数据使用适当的字段类型 - 例如varcharXML

答案 1 :(得分:0)

您的字符串\340\252\215\340\252\257\340\253\207\340\252\215在八进制编码中完全是ઍયેઍ,因此postgres会正确存储您的数据。 PostgreSQL转义所有不可打印的字符,有关详细信息,请参阅postgresql documentation,尤其是第8.4.2节