使用mysqldump對數據庫進行備份的亂碼問題
最近在做項目的工程中,由於系統中需要提供數據庫備份的功能,經過網上一番搜索,覺得采用簡單的mysqldump
(1)java代碼
[java]
<span style="font-size:14px;">String backupSQL = "cmd /c mysqldump -urootdd --extended-insert=false -hlocalhost fts> "
+ DB_BACKUPFILE_PATH + " ";
Runtime runtime = Runtime.getRuntime();
System.out.println(runtime.exec(backupSQL));</span>
通過執行上面的代碼段的出來的文件中,中文部分都已亂碼出現,起初懷疑是數據庫的編碼有關,於是通過以下方式來查詢數據庫的編碼
(2) >show variables like 'character%';
經過以上步驟可以確定數據庫的編碼是沒有問題的,經過再次網上搜索 得到如下結論
"如果MySQL服務器上的字符集是 latin1 或者其他的的,mysqldump 出來的中文都是亂碼!一個簡單的辦法是加上默認字符集選項,如:
mysqldump [-h 127.0.0.1 -P 3307 ] -u username --default-character-set=gbk -p databasename > dumpfile.txt,
--default-character-set 知道數據內容是中文時可以指定為 gbk,這樣即使數據庫本身設置字符集為 latin1 出來的文件中文也能正常!", 最後將代碼改成如下形式
(3)最終java 代碼
[java]
<span style="font-size:14px;">String backupSQL = "cmd /c mysqldump -urootdd --default-character-set=gbk --opt --extended-insert=false -hlocalhost fts> "
+ DB_BACKUPFILE_PATH + " ";
Runtime runtime = Runtime.getRuntime();
System.out.println(runtime.exec(backupSQL));</span>
經過以上修改,終於搞定,導出的文件中的中文時正常顯示的