1 頁 (共 1 頁)

[問題]mysql under windows XP to postgresql under debian

發表於 : 2007-03-31 05:25
yjchen
不知道有沒有人有相關經驗?
phpbb2.0.22 with MySQL5 under win32 資料庫轉移到 phpbb2.0.22 with PostgreSQL8 under Debian GNU/Linux

目前轉換 sql 工具使用: mysql2psgql-1.2
The mysql2psql Project -- Conversion from MySQL to PostgreSQL

從 win32 上面使用 phpbb2 後台備份工具, 備份完整: phpbb_db_backup.sql, upload 到 linux 上面, 使用 mysql2pgsql perl script 轉換到 phpbb_db_backup.pg.sql 檔案中間發生了錯誤. 以下是轉換過程:

代碼: 選擇全部

$ perl mysql2pgsql.perl phpbb_db_backup.sql phpbb_db_backup.pg.sql
utf8 "\xE7" does not map to Unicode at mysql2pgsql.perl line 343, <IN> line 1194.
Malformed UTF-8 character (unexpected non-continuation byte 0x27, immediately after start byte 0xe7) in pattern match (m//) at mysql2pgsql.perl line 327, <IN> line 1194.
Malformed UTF-8 character (unexpected non-continuation byte 0x27, immediately after start byte 0xe7) in substitution (s///) at mysql2pgsql.perl line 789, <IN> line 1194.
Malformed UTF-8 character (fatal) at mysql2pgsql.perl line 790, <IN> line 1194.
這是我想要轉換的 sql 檔案(phpbb2 with MySQL5 under Win32 by phpbb admin panel): phpbb_db_backup.sql
可以發現這是 utf-8 encoding.

在 google 搜尋錯誤訊息: Malformed UTF-8 character 找到不少.
例如:
perl script 加入 use unicode;
shell environment: export LANG=C
不過仍然無法解決我的問題. 或許我還得再找找.
目前分別測試過 perl with cygwin, Debian GNU/Linux, win32

另外, 以後可能要解決的問題是, win32 上面 phpbb2 MySQL5 擁有者是 root, 但是 linux 上面 PostgreSQL 擁有者似乎不能是 root.

發表於 : 2007-03-31 22:22
~倉木麻衣~
我看你的資料庫似乎是utf8編碼, 但抓下來的sql檔所顯示的卻是big5
先假設你是用utf8好了
先將phpbb_db_backup.sql 轉成utf8 (看要用convertz或其它工具轉)
然後開啟mysql2pgsql.pl, 找到這行

代碼: 選擇全部

use warnings;
在它底下加上

代碼: 選擇全部

use encoding 'utf8';
然後再執行轉換程式(不帶任何參數), 我是在wi32下跑的

代碼: 選擇全部

perl mysql2pgsql.pl phpbb_db_backup.sql pg.sql
這樣就可以順利轉換出來了