我正在使用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编码的。
答案 0 :(得分:1)
值正确存储,但在检索时会转义为八进制转义序列。
要解决此问题 - 更改数据库驱动程序的设置或为bytea选择不同的编码/转义。
或者只为XML数据使用适当的字段类型 - 例如varchar
或XML
。
答案 1 :(得分:0)
您的字符串\340\252\215\340\252\257\340\253\207\340\252\215
在八进制编码中完全是ઍયેઍ
,因此postgres会正确存储您的数据。 PostgreSQL转义所有不可打印的字符,有关详细信息,请参阅postgresql documentation,尤其是第8.4.2节