Postgres:从 bytea 转换为 varchar 后 '\r' 仍然存在
Postgres: After converting from bytea to varchar '\r' remains
我有一个 table,其中包含 xml 文件作为二进制数据。 xmls 在 bytea 中包含“\r\n”字符作为“52”。我需要将列类型从 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?
您必须在单独的步骤中剥离托架 returns。
如果您可以批量处理它们,我建议您这样做:
ALTER TABLE my_table
ALTER xml_data TYPE text
USING replace(
convert_from(xml_data, 'UTF8'),
E'\r',
''
);
是否有充分的理由使用数据类型 varchar
(或 text
,两者相同)而不是 xml
?
我有一个 table,其中包含 xml 文件作为二进制数据。 xmls 在 bytea 中包含“\r\n”字符作为“52”。我需要将列类型从 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?
您必须在单独的步骤中剥离托架 returns。
如果您可以批量处理它们,我建议您这样做:
ALTER TABLE my_table
ALTER xml_data TYPE text
USING replace(
convert_from(xml_data, 'UTF8'),
E'\r',
''
);
是否有充分的理由使用数据类型 varchar
(或 text
,两者相同)而不是 xml
?