Mysql中文亂碼以及匯出為sql語句和Excel問題解決方案[圖文]

來源:互聯網
上載者: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主機地址 資料庫名 表名 > 匯出檔案儲存體路徑

例如:

/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,表示不解。

匯出整個資料庫:

/usr/local/mysql/bin/mysqldump -uroot -p123456 -hlocalhost -t --extended-insert=false --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,就可以了。就這麼個小小的改動,讓我足足折騰了一個通宵,表示有解決問題強迫症,問題不解決真的睡不著,唉~~~

四、總結。

似乎很多領導做報告都喜歡加個總結,說上一堆廢話,雖然回回都聽不懂,但感覺很厲害的樣子。於是我也加一個總結:中文亂碼真特麼折騰人,這些年跟你鬥爭了好多回了,好了,總結完畢。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

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.