Mysql導出導入亂碼問題解決
MySQL從4.1版本開始才提出字符集的出導概念,所以對于MySQL4.0及其以下的入亂版本,他們的碼問字符集都是Latin1的,所以有時候需要對mysql的題解字符集進行一下轉換,MySQL版本的出導升級、降級,入亂特別是碼問升級MySQL的版本,為了不讓程序繼續沿用Latin1字符集之后對以后Discuz!題解版本升級的出導影響和安裝SupeSite,這就需要我們進行字符集的入亂轉換!
本人轉換過好多數據了,也用過了好多的碼問辦法,個人感覺最好用的題解就是使用MySQL命令導出導入中將字符集轉換過去!
由于字符集比較多,現在主要舉GBK和Latin1這兩種字符集之間的轉換!
首先我將講解一下如何將MySQL從GBK轉換為Latin1的(如果是UTF8或者BIG5轉換即將GBK換成相應的字符集即可)!這種問題常發生在MySQL從MySQL4.1及其以上版本轉換為MySQL4.1以下的版本的過程中!有的人圖個方便,特別是出導有主機權限的,直接將MySQL的入亂data目錄下的文件拷貝過去了,這樣造成的問題就是亂碼問題!當然我所說的這些都要求你必須擁有主機權限,虛擬主機用戶可以在本地搭建好論壇,下載數據到你的本地,然后把數據導入到你本地的數據庫,然后進行字符集的轉換!
現在的步驟就是將MySQL的數據導出了,在mysql的命令提示符下(linux系統為mysql的命令目錄下),輸入下面導出的命令:
mysqldump -uroot -p --default-character-set=gbk --set-charset=latin1 --compatible=mysql40 --skip-opt discuz>discuz.sql
這樣就輕松的將數據從MySQL數據庫中導出了,此時導出的文件在與mysql命令同級的目錄下,即bin目錄下,而且已經將MySQL字符集導出為Latin1的了!現在要做的就是將數據導入MySQL4.0中去!
同樣在4.0版本的mysql命令提示符下(linux系統為mysql的命令目錄下),輸入下面導入命令:
mysql -uroot -p --default-character-set=latin1 -f discuz<discuz.sql
這樣就將字符集從GBK轉為Latin1同時將MySQL從4.1以上版本的轉為MySQL4.0的了!
現在講解一下如何從Latin1字符集轉換為GBK的!
由于只有MySQL4.1以上的版本才有字符集的概念,所以如果你要將MySQL4.0的字符集從Latin1轉換為GBK字符集的話,必須導入到MySQL4.1以上的版本中,然后再導出!這里面就多了一個導出為Latin1的步驟!
同樣在MySQL4.0的命令提示符下,輸入下面導出的命令:
mysqldump -uroot -p --default-character-set=latin1 --set-charset=latin1 --skip-opt discuz>discuz.sql
然后導入到MySQL4.1中,輸入下面導入的命令:
mysql -uroot -p --default-character-set=latin1 -f discuz<discuz.sql
然后在MySQL4.1下轉換字符集,執行下列導出命令:
mysqldump -uroot -p --default-character-set=latin1 --set-charset=gbk --skip-opt discuz>discuz.sql
然后執行導入命令:
mysql -uroot -p --default-character-set=gbk -f newdiscuz<discuz.sql
如果不出問題的話,那么轉換就完畢了!其實整個過程還是比較簡單的,只是過程看起來比較麻煩些,但是過程卻是很簡單明了的!
下面舉出一個在導入過程中極易容易出現的問題!
在導入的時候容易出現unknown command '/'這樣的錯誤,其實這是由于MySQL在導出的時候,它有時候給一些繁體字后面自動加上了個反斜杠造成的!解決此問題的辦法就是打開備份的sql(這里為discuz.sql),提示錯誤的時候會提示具體哪行出現了錯誤,找到那行,把反斜杠去掉就行了!其實你可以用Ultraedit這些文本處理的工具,批量的去處理這些反斜杠
!憑個人經驗,有很多用戶名取的比較怪,這樣就容易出現反斜杠,這樣只要糾正那些用戶名就行了!
以上是個人在轉換數據過程中的一些經驗之談,很多地方還有待大家完善!
【知識補充】
就是mysql自帶的工具mysqldump,這個工具十分強大,可以導出數據,并且可以導出不同版本的數據、也可以導出用于其他數據庫的碼問數據. 這個工具在命令行、cmd下用的,如果你的msyql/bin目錄沒有配置在系統的環境變量里,需要先cd到mysql的bin目錄.
基本導出
mysqldump -u 數據庫用戶名 -p 數據庫名稱 [表名] > 導出到文件的路徑名
例如:導出test_db這個數據庫,數據庫用戶為root沒有密碼(沒有密碼就不用加 -p 了):
mysqldump -u root test_db > c:/test.sql這樣就可以到處test這個數據庫了
如果我要導出 test 數據庫中的user 表用 ajin 這個用戶 密碼是 123
mysqldump -u 用戶名 -p密碼 test_db user >c:/test_user_table.sql
回車后提示輸入密碼就可以了
在導出過程中改變數據庫默認的字符集
例如:我要導出 test_db 這個數據庫 轉換編碼為 utf8
mysqldump -u 用戶名 -p密碼 --default-character-set=utf8 test_db >c:/test.sql
轉換成其他字符只需替換 utf8 就可以了
導出不同版本數據或者導出給數據庫用的數據
例如:我的數據庫 Mysql 4.1 的 我要導出一個 默認字符集 utf8 的 4.0版本的數據
mysqldump -u 用戶名 -p密碼 test_db --compatible=mysql40 --default-character-set=utf8 test > c:/test.sql
就可完成了所謂的降級 --compatible= 可以跟得參數有 mysql323 mysql40 oracle mssql db2 等等.
導出整個數據庫
mysqldump -u 用戶名 -p密碼 數據庫名 > 導出的文件名
mysqldump -u wcnc -p smgp_apps_wcnc > wcnc.sql
導出一個表
mysqldump -u 用戶名 -p密碼 數據庫名 表名> 導出的文件名
mysqldump -u wcnc -p smgp_apps_wcnc users> wcnc_users.sql
導出一個數據庫結構
mysqldump -u wcnc -p -d --add-drop-table smgp_apps_wcnc >wcnc_db.sql
-d 沒有數據 --add-drop-table 在每個create語句之前增加一個drop table
導入
mysql -u 用戶名 -p密碼 接收數據的數據庫名 < 要導入的文件路徑
例如:我要導入 test.sql 這個數據到discuz_db這個數據庫
mysql -u 用戶名 -p密碼 discuz_db <c:/test_user_table.sql
導入數據庫
常用source 命令,進入mysql數據庫控制臺,
如mysql -u root -p
mysql>use 某個數據庫的名字
然后使用source命令,后面參數為腳本文件(如這里用到的.sql)
mysql>source wcnc_db.sql
原文:http://phpandseo.blog.sohu.com/72568454.html
來源鏈接:https://www.cnblogs.com/imxiu/p/3377859.html