如何将旧的postgresqldb从ascii转换为utf8



我有一个来自postgresql 8.4版本的旧数据库,我的老板告诉我尝试从SQL_ASCII编码转换为UTF8编码。我尝试CCD_ 1;用于编码"UTF8"的无效字节序列:0xe76122";搜索得更多,我尝试了pg_dump --encoding=ISO88591,它成功了,我也可以毫无问题地将它导入到我创建的新的空UTF8数据库中,但我不时收到这样的消息:";错误:字符0xc296编码为";UTF8";在";WIN1252"&";。有什么解决方案吗?

您在转换数据库时犯了一个错误。

它必须在WINDOWS-1252中编码,而不是在ISO 8859-1中编码,并且必须有一个"em破折号"(Unicode U+2013,WINDOWS-1252的代码点96(。

当您转储编码为LATIN1=ISO88591的数据库并加载它时,字节0x96被解释为Unicode U+0096,即UTF-8中的0xC296。该字符在WINDOWS-1252中不存在,因此转换失败。

你必须再次转储和恢复数据库,但这次使用

pg_dump --encoding=WIN1252

由于您的数据库中也有代码点0x81,它可能是WIN1251(西里尔文(或WIN1256(阿拉伯语(。或者您有一些随意的混合——那么您必须在迁移之前修复数据。

最新更新