2009-01-18 75 views
2

我在PostgreSQL中使用「encoding ='UTF8'」創建了一個數據庫,並在其中加載了一些UTF8數據。選擇工作正常,但是當我嘗試做一個「WHERE UPPER(名稱)=‘富’」,在查詢時,我得到爲什麼我不能在PostgreSQL數據庫中執行「upper()」?

ERROR: invalid multibyte character for locale 

我的研究似乎表明,這是因爲PostgreSQL安裝出錯「initdb」 - 用LANG=en_US而不是LANG=en_US.UTF8。做「SHOW LC_COLLATE」顯示「en_US」。我不想轉儲和重新創建我的所有數據庫,因爲其中有幾個是PostGIS,重新創建這些數據庫是非常痛苦的。是否有解決方法,就像做一個適用於UTF8的「UPPER」等效的方法?

更新我落得這樣做轉儲,reinitdb,以及數據庫的恢復,這是比我想象的還要好,只是有點搞清楚一個問題,當數據本來是要痛苦少因爲postgres用戶沒有設置PGDATA環境變量,也沒有我能找到的任何配置文件或shell腳本。

回答

1

我不認爲你想要的解決方法是可行的,但是轉儲和恢復你的啓用PostGIS的數據庫應該可以正常工作。我定期使用PostGIS函數和數據與geom對象來轉儲和恢復數據庫。

你有什麼樣的問題?

+0

我的問題是當我做pg_dumpall時,然後恢復,它開始抱怨重複的函數定義等。 – 2009-01-18 11:40:34

1

您的診斷是正確的,這是PostgreSQL中Unicode的常見問題。安裝程序嘗試變得聰明,並使用運行它的shell的語言環境初始化:-(

我建議,如果無法轉儲和恢復數據庫,則會出現更嚴重和更緊急的問題,即大數據。恕我直言,你應該先解決這個問題,然後再發布PostgreSQL的新版本(或硬盤發生故障後)才能真正恢復你的數據。

相關問題