0

我一直在尝试将我的 MySQL 迁移到 Postgres,并且从我发现的水龙头gem。

不幸的是,它基本上在每个包含用户数据的表上都失败了,但存在某种异常

PG::Error: ERROR:  invalid byte  sequence for encoding "UTF8": 0xed2020 (Sequel::DatabaseError) 

每个表中的无效字符都不同,但例外是相同的。

这不是其他PG::Error: ERROR: invalid byte sequence for encoding问题的重复,因为每个问题都提到了使用Iconv.iconv("UTF8...", content)来强制编码。但我不能这样做,因为我正在使用水龙头进行导入。

还有一个侧面说明,我试过做mysqldump --compatible=postgres,但是当我尝试将它导入回 Postgres 时,它在每个查询中都失败了。

我正在使用 MySQL 5.1.63 和 PostgreSQL 9.1.4。

4

2 回答 2

1

看到这个问题:https ://github.com/ricardochimal/taps/issues/110

在启动 taps 服务器时添加一个显式的 utf-8 编码设置应该会有所帮助:

taps server mysql://user:password@host/dbname?encoding=utf8 httpuser httpass
于 2013-05-16T09:36:54.143 回答
1

您可以尝试使用 SQL_ASCII 编码而不是 UTF8 创建 PostgreSQL 数据库,看看是否可以解决问题。

基本上,您的问题似乎是您的 MySQL 数据库中包含非 UTF8 编码的文本,并且您正在尝试将其导入使用 UTF8 编码的 PostgreSQL 数据库中。如果您真的想将 PostgreSQL 数据库保持为 UTF8 编码,则需要在尝试插入之前将您在 MySQL 中使用的任何编码转码为 UTF8。

假设问题出在数据库级别。如果问题出在 ruby​​ 级别,您可以尝试使用 ruby​​ 1.8(如果您使用的是 ruby​​ 1.9),看看是否会有所不同。

于 2012-07-25T00:23:07.510 回答