解決MySQL中文亂碼以及版本不一致問題

來源:互聯網
上載者:User

 一、匯出資料

先說明一下自己的環境:Mac OS X 10.8.3, MySQL Community Server 5.6.10, MySQL Workbench 5.2.47。

我想把本機資料庫內的資料移轉到另一台機器上,於是使用Workbench中內建的import/export功能,其實就是調用mysqldump。不幸的是,出現了版本不一致的錯誤。

錯誤沒治了,最終找到解決方案,可以指定mysql的mysqldump,路徑為:/usr/local/mysql/bin/mysqldump,這樣是把資料匯出為sql語句的insert語句。

由於需要是把資料匯出為excel,所以通過mysql控制台使用select語句把資料匯出到excel檔案中。

下面先介紹怎麼匯出為excel檔案,然後介紹怎麼匯出為insert語句。

1、通過終端操作。

 
  1. cd /usr/local/mysql/bin/ 

2、到達bin目錄後,可以ls -l命令看看目前的目錄有哪些程式可以用,這裡先用mysql,命令格式為:

mysql -h主機IP -u使用者名稱 -p密碼

如:

 
  1. ./mysql -hlocalhost -uroot -p123456 

注意前面加的"./"。

這時就進入mysql命令控制台,終端上顯示為:

3、然後通過show databases命令查看當前的所有資料庫,使用use命令選擇進入某個資料庫,注意每個命令都要以英文分號“;”結束。

4、使用sql語句匯出需要的資料,sql語句不限於單個表的查詢。由於我的資料庫編碼是utf8格式,而office預設的編碼則是gb2312,所以當某個欄位中包含中文時,匯出到excel後,中文內容是會亂碼的,此時需要convert轉換編碼,具體使用方式:

我試著把檔案儲存到案頭,但始終提示沒有許可權,應該是和使用者有關吧,無視了。當使用“./”這個路徑儲存時,實際是儲存到了/usr/local/mysql/data下面。開啟看看,喲西,不亂碼了。

5、下面是把資料匯出為sql的insert語句。

使用mysqldump命令,可以指定是單個表還是整個資料庫匯出。

開啟終端,定位到/usr/local/mysql/bin,使用這個目錄下的mysqldump。

匯出單個表:

命令格式為:

mysqldump -u使用者名稱 -p密碼 -h主機地址 資料庫名 表名 > 匯出檔案儲存體路徑

例如:

 
  1. /usr/local/mysql/bin/mysqldump -uroot -p123456 -hlocalhost -t --extended-insert=false --default-character-set=utf8 SpiderBBSDB Catalog > /Users/ethan/Desktop/Catalog.sql 

其中用到了幾個參數,簡單說明一下:

-t:等同於--no-create-info,只匯出資料,而不添加CREATE TABLE 語句。預設匯出的檔案中也有create table語句。

--extended-insert:使用具有多個VALUES列的INSERT文法,也就是傳說中一次插入多條資料的INSERT句式。這樣使匯出檔案更小,並加速匯入時的速度,但是有可能sql語句會有長度限制,所以我並不推薦此種方式,比如我某個表中有500W條資料,難保能用一條insert語句可以執行完畢。此選項預設為開啟狀態,把他置為false,就是一條資料一個insert語句了。

--default-character-set:設定預設字元集,由於我的資料庫和表均是設定為utf8編碼格式,當不設定此選項時,匯出的中文是亂碼,奇怪的是官方說明中,說這個選項的預設值是utf8,表示不解。

匯出整個資料庫:

 
  1. /usr/local/mysql/bin/mysqldump -uroot -p123456 -hlocalhost -t --extended-insert=false 
  2.  --default-character-set=utf8 SpiderBBSDB > /Users/ethan/Desktop/SpiderBBSDB.sql 

二、匯入資料。

有匯出就有匯入。上面第5步匯出的sql檔案,可以直接在mysql workbench中執行,也可以使用mysqldump匯入,這裡說明一下如何使用mysqldump匯入:

/usr/local/mysql/bin/mysqldump -uroot -p123456 -hlocalhost --default-character-set=utf8 SpiderBBSDB < /Users/ethan/Desktop/Catalog.sql

三、關於java串連mysql寫入中文亂碼。

關於這個中文亂碼問題,著實折騰了我好久好久。一開始就百度Googlebing,網上大多複製粘貼的答案,在這裡記錄一下自己的情況,希望同路人不再走彎路。

其實我的修改很簡單,把資料庫的編碼改為utf-8,在建立表時,把表的預設編碼也改為utf-8,就可以了。就這麼個小小的改動,讓我足足折騰了一個通宵,表示有解決問題強迫症,問題不解決真的睡不著,唉~~~

編輯精選】

  1. 維基逃離MySQL 力挺開來源資料庫
  2. MariaDB成為MySQL命運轉折點?
  3. MySQL遭遇DELETE誤操作的復原
  4. 一步完成MySQL向Redis遷移
  5. 兩種方法解決mysql主從不同步

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.