将 Postgresql 数据库从包含混合编码类型的 SQL_ASCII 转换为 UTF-8

Dav*_*rds 5 sql database postgresql encoding utf-8

我有一个 postgresql 数据库,我想将其转换为 UTF-8。

问题是它目前是 SQL_ASCII,因此尚未对其输入进行任何类型的编码转换,因此最终在表中得到混合编码类型的数据。一行可能包含编码为 UTF-8 的值,另一行可能包含 ISO-8859-x 或 Windows-125x 等。

这使得执行数据库转储并将其转换为 UTF-8 以便将其导入新的 UTF-8 数据库变得困难。如果数据都是一种编码类型,我可以通过 iconv 运行转储文件,但我认为这种方法在这里不起作用。

问题本质上是否在于了解每个数据的编码方式?在这里,在不知道的地方,它可以被计算出来,甚至可以被猜测吗?理想情况下,我希望有一个脚本可以接受一个文件,任何文件,并输出有效的 UTF-8。

Gra*_*ean 5

正是编写Encoding::FixLatin来解决的问题*。

如果您安装 Perl 模块,那么您还将获得fix_latin命令行实用程序,您可以像这样使用它:

pg_restore -O dump_file | fix_latin | psql -d database
Run Code Online (Sandbox Code Playgroud)

阅读文档的“限制”部分以了解其工作原理。

[*] 注意我假设当你说 ISO-8859-x 时你的意思是 ISO-8859-1,当你说 CP125x 时你的意思是 CP1252 - 因为 ASCII、UTF-8、Latin-1 和 WinLatin-1 的混合是一个常见的案例。但如果你确实混合了东西方编码,那么抱歉,你就完蛋了:-(