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。
这正是编写Encoding::FixLatin来解决的问题*。
如果您安装 Perl 模块,那么您还将获得fix_latin命令行实用程序,您可以像这样使用它:
pg_restore -O dump_file | fix_latin | psql -d database
阅读文档的“限制”部分以了解其工作原理。
[*] 注意我假设当你说 ISO-8859-x 时你的意思是 ISO-8859-1,当你说 CP125x 时你的意思是 CP1252 - 因为 ASCII、UTF-8、Latin-1 和 WinLatin-1 的混合是一个常见的案例。但如果你确实混合了东西方编码,那么抱歉,你就完蛋了:-(