0

我有一个包含 xml 文件作为二进制数据的表。xmls 在 bytea 中包含“\r\n”字符作为“\015\012”。我需要将列类型从 bytea 更改为 varchar。

我跑:

ALTER TABLE my_table ALTER COLUMN xml_data TYPE VARCHAR;
UPDATE my_table SET xml_data = convert_from(xml_data::bytea, 'UTF8');

它适用于linux。但在 Windows 上,它将 '\015' 转换为 "\r"(两个字符)。所以我在结果中有类似的东西:

<field>...</field>\r
<field>...</field>

也许有一种将二进制数据转换为 UTF 的正确方法?

4

1 回答 1

0

您必须在单独的步骤中去除回车。

如果您可以批发摆脱它们,我建议您:

ALTER TABLE my_table
   ALTER xml_data TYPE text
      USING replace(
               convert_from(xml_data, 'UTF8'),
               E'\r',
               ''
            );

是否有充分的理由使用数据类型varchar(或text相同)而不是xml

于 2017-04-05T09:11:05.497 回答