2012-10-20 85 views
0

從mysql插入數據到postgres時出現以下錯誤。Postgres插入錯誤 - PG ::錯誤:錯誤:無效的字節序列編碼「UTF8」:0xe073

PG::Error: ERROR: invalid byte sequence for encoding "UTF8": 0xe073 
: INSERT INTO "places" ("accent_city", "city", "country", "created_at", "latitude", "longitude", "region", "updated_at") VALUES ($1, $2, $3, $4, $5, $6, $7, $8) RETURNING "id" 

我想插入這個文件worldcitiespop.txt在我PG數據庫rake任務

namespace :places_db do 
    desc "save cities in database" 
    task save_places: :environment do 
     File.open("lib/city_name/worldcitiespop.txt", "r").each_line do |row| 
      row = row.force_encoding('ISO-8859-1').split(',') 
      Place.create(country: row[0], city: row[1], accent_city: row[2], region: row[3], latitude: row[5], longitude: row[6]) 
     end 
    end 
end 
+0

你用什麼來插入數據,你試圖插入什麼字符? –

+0

(正確的說0xe073在UTF-8中是一個無效的字節序列,儘管...) –

+0

我更新了我的問題 – nadine1988

回答

1

由於文件是用ISO-8859-1編碼的,最簡單的方法就是讓數據庫完成只導入轉換前通過發出下面的SQL查詢:

SET client_encoding=latin1; 

要返回到以前的編碼導入後:

SET client_encoding=default; 

此設置僅影響當前會話。

+0

在「row = row.force_encoding('ISO-8859-1')。split(',')」和「Place.create ...」之間? – nadine1988

+0

它可能會起作用,但是爲每條線做這件事將會過度。我不知道ruby如此不確定的語法,但這應該被添加到循環之外。 –

相關問題