2011-10-30 48 views
4

我有一個phpnuke網站的轉儲文件,不知何故在utf8中。我正嘗試在新服務器上重新打開此網站。但nuke使用latin1。 我需要一種使用此utf-8轉儲文件創建latin1數據庫的方法。 我嘗試了所有我能想到的。 iconv,mysql替換,php替換...將utf-8 mysqldump導入latin1數據庫

+0

您擁有的轉儲文件是以UTF-8編碼的,並且所有字符都以UTF-8正確顯示,您只是想將它們存儲在latin1數據庫中?而且這些字符都是latin1兼容的(即所有字符都可以用latin1編碼)? – deceze

+0

這正是我想要的,情況是什麼。 – hctopcu

回答

2

在轉儲開始時添加SET NAMES 'utf8';語句。 這將向MySQL表明它即將收到的命令是UTF8。 它會將數據存儲在當前設置的表中的任何字符集中;在這種情況下,如果你的數據庫是latin1,數據將被存儲在latin1中。

http://dev.mysql.com/doc/refman/5.0/en/charset-connection.html

SET NAMES表示的字符集的客戶端將使用SQL語句發送到服務器。因此,SET NAMES的'cp1251'告訴服務器,「來自這個客戶端的未來傳入消息使用字符集cp1251」。它還指定了服務器用於將結果發送回客戶端的字符集。 (例如,它表示什麼字符集使用的列值,如果你使用SELECT語句。)

最後一件事是latin1的比UTF8可用更少的字符。對於西歐語言以外的任何內容,您將丟失數據。

例如,假設列test是latin1。第一項將正確顯示(法國口音在latin1內);然而,韓語中的第二項將顯示爲問號。

SET NAMES 'utf8'; 
INSERT INTO TESTME(test) VALUES ('Bienvenue sur Wikipédia'); 
INSERT INTO TESTME(test) VALUES ('한국어 위키백과에 오신 것을 환영합니다!');