mysqldump之字符集問題解決


  最近導數據的需求真多,年底了大家都要做分析嗎?近期使用mysqldump導出的中文出現亂碼問題。

mysqldump -uroot -ppassword -S /tmp/mysql9991.sock test name > 1.txt

  首先想到的就是添加--default-character-set參數來強制制定UTF8字符集來解決

mysqldump -uroot -pTR4anis@xtooRz -S /tmp/mysql9991.sock test name  --default-character-set=UTF8 > 1.txt

  但是問題依然沒有解決。思考涉及字符集的地方有三個,第一、mysql自身的設置 第二、服務器的字符集設置 第三、使用工具的字符集設置

  1、首先,MySQL的字符集問題一般都比較鬧心,主要由於MySQL的字符集設置的太多了,經常搞混,不細說了,如果單講又能寫一篇blog了。

+--------------------------+-----------------------------------------+
| Variable_name            | Value                                   |
+--------------------------+-----------------------------------------+
| character_set_client     | utf8                                    | 
| character_set_connection | utf8                                    | 
| character_set_database   | utf8                                    | 
| character_set_filesystem | binary                                  | 
| character_set_results    | utf8                                    | 
| character_set_server     | utf8                                    | 
| character_set_system     | utf8                                    | 
| character_sets_dir       | /usr/local/mysql-5.5.31/share/charsets/ | 
+--------------------------+-----------------------------------------+

  我們使用set names utf8來規避mysql端的字符集問題。

  2、服務器的字符集問題也沒有問題

echo $LANG
en_US.UTF-8

  使用file命令查看顯示為UTF8。

file activity.txt 
activity.txt: UTF-8 Unicode text, with very long lines

  3、本身CRT可以輸入中文

 

  那么到底是什么原因導致的呢?

  最后突然發現mysqldump的版本是5.0.77而服務端mysql的版本是5.5.12,前后相差接近2個大版本。趕緊使用了5.5.12的mysqldump,問題順利解決。

  看來就是版本的問題了,環境一致性實在太重要了。出現字符集問題我們經常糾結於各個地方的字符設置,但是從上例看出,其實和字符集設置沒有一點關系。

  強烈推薦所有mysql相關命令全部使用和mysql server端同版本的mysql的命令,這樣可以避免一些不可預知問題的發生。

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM