2011-12-13 52 views
3

我正在使用delphi和postgres 9.0, 的軟件,原始開發人員選擇數據庫編碼爲「SQL_ASCII」 ...... 所以我們改變了編碼UTF-8爲我們的數據庫.. 我們,我們開始後編碼「UTF-8」的字符0xc286在「WIN1252」中沒有等效...使用iconv進行轉換postgres恢復崩潰

enter image description here 的一個檢查的ONCLICK收到此錯誤框 (表單從數據庫填充) 查詢where錯誤來了

'select * from diary where survey in('2005407')';

,但這個錯誤只來了少數人的複選框,而不是所有

的變化是直線前進,但我們有大量的歷史數據,我們將不得不重新儲存到新創建的UTF-8 database..so我也跟着我在網上和計算器發現的步驟也

  1. 轉儲數據庫作爲E- UTF-8SQL_Ascii_backup.backup
  2. 使用的iconv轉換SQL_ASCIIUTF-8

    "C:\Program Files\GnuWin32\bin\iconv.exe" -f ISO8859-1 -t UTF-8 C:\SQL_Ascii_backup.backup>UTF_Backup.backup 
    

    3.創建與編碼一個新的數據庫爲UTF-8並重新存儲的備份UTF_Backup.backup

但當我嘗試恢復它,我得到他的錯誤 Error when i try to restore the newly encoded backup

然後我試着傾銷原來SQL_ASCII數據庫爲純SQL_Ascii_.sql文件 然後再我用的iconv改變encoding..and然後恢復

>"C:\Program Files\PostgreSQL\9.0\bin\psql.exe"-h localhost -p 5434 -d myDB -U myDB_admin -f C:\converted_utf8.sql 

,這是正確的,但恢復仍IM歌廳的錯誤。

'編碼爲「UTF-8」的字符0xc286在「WIN1252」中沒有等效;

+1

WIN1252從哪裏來?某處您被Bill叔叔的默認設置中的一個擊中。如何在pgadmin3中設置client_encoding?如何在創建數據庫時在轉儲文件中指定? – wildplasser

+0

重新編譯OP之後:數據已經轉換好了,但「應用程序」對字符編碼有一些奇怪的假設。也許有可能在應用程序中設置client_encoding?否則:核武器。或者:將數據庫表重新編碼到WIN1252。或編輯少數受影響的行。 – wildplasser

+0

@wildplasser ..im不知道應用程序中的client_encoding ..我無法使用WIN1252對數據庫進行重新編碼,因爲客戶端希望數據庫是UTF-8 ....但是,如何編輯受影響的行? – PresleyDias

回答

6

C2 86是字符U + 0086的UTF-8編碼,一個模糊的C1 control character。該字符存在於ISO-8859-1中,但不存在於Windows的默認code page 1252中,該空間在ISO-8859-1具有C1控件的空間中具有可打印字符。

你的iconv命令轉換爲UTF-8有-f ISO8859-1,但你的意思可能是-f windows-1252。這將字節86映射到字符。

+0

@ dan04..i在以下命令中嘗試了-f windows-1252 ..「」C:\ Program Files \ GnuWin32 \ bin \ iconv.exe「-f windows-1252 -t UTF-8 C:\ Mybackup.backup > convert.backup「...但是然後我得到這個錯誤_」iconv:C:\ Mybackup.backup:無法轉換 – PresleyDias

+0

然後我嘗試用普通的.sql轉儲也與'「C:\ Program Files \ GnuWin32 \ bin \ iconv.exe「-f windows-1252 -t UTF-8 C:\ myBackup.sql> converted.sql'但仍然是'不能轉換'錯誤 – PresleyDias

+0

我發現iconv無法轉換文件作爲這TRÂL..the方形字符...我比較myBackup.sql(3.19 Mb大小)文件和converted.sql(219 KB大小)在比較..所以然後我手動刪除字符和運行應用程序..它的工作..沒有錯誤 – PresleyDias

1

我擺脫了錯誤

「編碼 「UTF-8」 具有 「WIN1252」 不等效的字符0xc286的;

按照dan04答案,但爲了防止失敗的iconv轉換傾銷

  1. 轉儲數據庫UTF-8(做一個普通的dump..so您可以到找到故障點)
  2. 使用的iconv SQL_ASCIIUTF-8使用

    轉換

    「C:\ Program Files文件\的GnuWin32 \斌\ iconv.exe」 -f窗口1252 -t UTF-8 C:\ MqPlainDump.sql> convertedDump.sql

  3. 更換「[ ]」字符(這是在我的情況下,這是導致trouble..its方形字符)

  4. 還原數據庫

和應用是好去(在我的情況)

相關問題