2012-12-28 111 views
0

我正在將大量的mysql數據庫從幾臺共享的網絡主機遷移到一臺共享的網絡主機。將mysql從一臺主機遷移到另一臺主機,編碼問題

其中大部分是葡萄牙語,所以有不少特殊字符。我正在遷移的一些DB是latin1,其中一些是cp1251,一些是utf8。

當然,簡單地傾倒的DB,然後恢復轉儲到新的主機完全搞砸的編碼和「?」字符和其他廢話出現在與數據庫相關的實際網站中。

從小規模來看,可以接受使用html charset標籤,知道要轉儲/還原爲什麼,但問題是我們正在處理數千個數據庫和網站,並且遷移是全部通過幾個腳本自動完成。

我在尋找有關傾倒/恢復這些數據庫的最佳方法的建議,假設執行作品的腳本不知道在HTML標記中指定的編碼。

到目前爲止,我已經嘗試過使用實際的mysqldump工具,以及用php腳本來模擬它,並且從內存而不是從文本文件中進出文件,這些文件都沒有完全複製數據從一個到另一個沒有編碼問題。

我應該使用UTF8編碼轉儲,然後恢復原樣無論HTML代碼頁的? 無論HTML代碼頁如何都以UTF8進行轉儲和恢復? 轉儲和恢復在每個創建表語句中找到的默認字符集?

我的這些不同情景的影響和作用的認識是有限的,但我需要知道的是基本上如果有一種方法可以完美地複製,而不2個數據庫服務器之間的編碼問題的數據不知道被使用的代碼頁正在訪問數據的腳本的HTML。

+0

您是否嘗試將mysql dir(.MYD和.MYI)中的所有數據文件複製到新服務器? –

+0

我無權訪問,我們只擁有擁有數據庫的客戶擁有的相同訪問權限,即連接到數據庫。沒有管理員或root訪問權限。 –

回答

0

編碼是一個非常困難的移動數據庫時解決,尤其是問題。首先嚐試進行結構化導入,然後將新結構與舊結構進行比較,特別注意數據庫字符集,表默認字符集和列字符集。您可以從information_schema數據庫中輕鬆獲取這些信息。

一旦這些被絕對鏡像,您就可以開始導入。但是,請注意,您可以在不同的編碼列中使用不同的編碼類型保存字符(在latin1列中使用utf8有效字符的情況非常普遍,latin 1是1字節字符集,而utf8可以使用up到3個字節)。

你可以嘗試在此之後各種方法來轉儲轉換,但據我所知,到目前爲止還沒有這種類型在同一列混合編碼類型的情況下轉換爲100%有效的方法。最終你可能需要做一些手動清理。但希望第一種方法就足夠了,一切都會好起來的。

相關問題