2010-08-27 93 views
11

本地我這樣做是爲了轉儲和移動數據庫,升級silverstripe 2.3〜2.4:mysqldump並用特殊字符還原。 øæåØÆÅ

mysqldump --opt --default-character-set=latin1 --skip-set-charset --user=$root -p$password $oldDatabase -r db.sql 

iconv -f LATIN1 -t UTF8 db.sql > db_utf.sql 


CREATE DATABASE $newDatabase CHARACTER SET utf8 COLLATE utf8_swedish_ci; FLUSH PRIVILEGES; GRANT ALL PRIVILEGES ON $newDatabase . * TO '$newUser'@'localhost'; FLUSH PRIVILEGES; 
SET NAMES utf8; SOURCE db_utf.sql; 

而且它的工作原理,但服務器的Ubuntu 8.04,與MySQL版本14.12 DISTRIB 5.0.51a上。 我得到瘋狂的√Π租船人而不是øæåØÆå。

任何人都知道我出錯了嗎?

+0

解決方案可以在這裏找到:http://stackoverflow.com/questions/152288/loading-utf-8-encoded-dump-into-mysql/與我們許多人一樣,使用**。php **命令來做備份, 您可能無法使用UTF8數據正確導出數據庫。所以,問題是,你需要使用'mysql_query(「SET NAMES'utf8'」);'在mysql_connect之後 – 2014-01-16 09:11:49

回答

1

這個固定我的問題。

  1. 導入雙編碼輸入。SQL

  2. 出口再次mysqldump -h "$DB_HOST -u "$DB_USER" -p"$DB_PASSWORD" --opt --quote-names --skip-set-charset --default-character-set=latin1 "$DB_NAME" > output.sql

  3. 導入清潔output.sql

How to restore the database double encoded by mysqldump

0

您是否嘗試過沒有iconv的步驟?

這裏就是傾銷UTF-8的數據庫,當我使用:

mysqldump \ 
    -u $DB_USER -p"$DB_PASS" \ 
    --default-character-set=Latin1 \ 
    --result-file=$DATAFILE 

,並恢復:

mysql -u $DB_USER -p"$DB_PASS" \ 
    --default-character-set=latin1 < $DATAFILE 
+0

仍然傾斜了字符在db.sql文件中! Ã應該在哪裏。 – 2010-08-27 12:36:00

+0

看起來像這樣可能是答案:http://www.vierundsechzig.de/blog/?p=323 – 2010-08-27 12:39:03

+0

或不,我很迷茫。 – 2010-08-27 12:43:25

1

也許只是表複製到$ newDatabase爲latin1的。 然後,對於每個表,執行:

ALTER TABLE table CONVERT TO CHARACTER SET utf8 COLLATE utf8_swedish_ci 
+0

我一直在看mysqldump,無論使用什麼默認字符集,我都會得到編碼字母:Ã。但是如果我在mysql中查看相同的數據,那麼這些字母很好。因此,問題是無法將數據輸入。 – 2010-08-31 14:00:29

+0

可以使用'sudo invoke-rc.d mysql stop'暫時停止mysql嗎?或者你在一些不能停止的生產服務器上?如果你可以停止mysql,你可以直接將數據庫複製到/ var/lib/mysql。一旦你支持了這個,用'sudo invoke-rc.d mysql start'重新啓動mysql,然後你可以直接在當前數據庫表上試試上面的'ALTER TABLE'命令。它應該將您轉換爲utf8而不使用'mysqldump'。 – unutbu 2010-08-31 14:19:34

+0

也許是最好的解決方案,謝謝。 – 2010-09-01 09:51:43

14

嘗試使用下面的命令來運行:

mysqldump -u root -p database -r output.sql 

,而不是用箭頭「>」

+0

感謝這個建議實際上解決了我的問題。 – alexsuslin 2014-12-09 11:36:02

1

,使這是非常重要的輸出重定向確保客戶端設置爲UTF8。令人困惑的是,它與將數據庫設置爲UTF8不同。打開/etc/my.cnf,確保你在[mysql]下的default-character-set = utf8不只在[mysqld]下

現在你應該可以直接把UTF8轉儲到mysql客戶端。我還建議在mysqldump命令中使用--hex-blob選項,因爲mysqldump並不完美。

+0

**如果您不同意這一點 - 請發表評論 – 2011-06-04 15:59:42

6

我花了兩天找出 我有同樣的問題,並解決它試圖用mysqldump 在阿拉伯語中導出數據庫時,每次你在記事本中打開OUTPUTFILE ++它的編碼是ANSI,你需要它爲UTF-8我的代碼導出和導入如下,事實證明我是對的,但我在終端上檢查數據庫,但終端不支持編碼,我只是嘗試檢查它與phpmyadmin和它的好,試着在記事本++ 中打開文件,或者直接嘗試你的應用程序,它將工作。

export命令

mysqldump -uuser -ppassword --default-character-set=utf8 dbname > outputfile //or even if you use -r instead of > no difference

導入命令 mysql -uuser -ppassword --default-character-set=utf8 dbname < outputfille // please take in mind this does override existing database

+0

還沒試過這個,但看起來不錯 – 2013-08-23 14:21:01

+0

試試吧,我確實有同樣的問題,如果現在不行,讓我現在,當它確實請檢查這是正確的答案 – Bakly 2013-08-24 08:34:43

+1

'--default-character-set = utf- 8'應該是'--default-character-set utf8'和'--default = character-set = utf-8'應該是'--default-character-set utf8' – 2013-11-22 09:49:47

3

我成功瞭如下

mysql --default-character-set=utf8 -u .. 

這可能會幫助你。