[轉]關於Navicat和MYSQL字符集不統一出現的中文亂碼問題

 

原文連接:關於Navicat和MYSQL字符集不統一出現的中文亂碼問題mysql

 

最近遇到一串關於MYSQL中文亂碼的問題,問題背景是這樣的:linux

在此以前,服務器上安裝好MySQL以後就立馬從新配置了字符集爲utf8,以後用Navicat進行數據導入,發現中文的字符導入以後全是亂碼,而後查論壇很sql

快經過如下方式解決了:創建鏈接時編碼選擇UTF-8,把使用MYSQL字符集以前的勾勾去掉。數據庫

 

 

數據庫的屬性設置爲:vim

 

OK,Navicat裏的中文字符正常了。因而 ,開心的進行數據導入,一切感受完美~服務器

接下來我在命令行採用最簡單的mysqldump方法進行備份,備份成功,由於都是測試數據,我順手打開備份好的文件一看,又是亂碼!以後命令行直接進到數據庫查詢,測試

果真查詢結果也是亂碼!我用命令行建了一個測試表,插入中文數據,查表,顯示正確;Navicat查表,亂碼。這是什麼狀況~明明兩邊都是UTF-8編碼

編碼方式。.net

心裏一萬隻羊駝奔過...命令行

OK 咱們如今來一步步排查問題:

首先,打開/etc/my.cnf 文件查看是否字符集配置正確,果真,在[mysqld] 下錯寫成了default-character-set=utf8

 

正確的配置方式:

先備份一下my.cnf文件,而後 vim /etc/my.cnf 插入如下幾行

[client]

default-character-set=utf8

[mysqld]

character-set-server=utf8  #注意這行不要寫成 default-character-set=utf8

[mysql]

no-auto-rehash 

保存以後service mysqld restart  啓動成功  ,進行以前的數據測試,亂碼問題依然存在。能兩邊的字符集真的不同呢?

查了一些資料才知道:只要涉及到文字的地方,就會存在字符集和編碼方式。對於MySQL數據庫系統而言,用戶從MySQL client端敲入一條sql語句,經過TCP/IP傳遞給

MySQL server進程,到最終存入server端的文件,每一個環節都涉及到字符存儲。涉及到字符存儲的地方,就涉及到字符集編碼。

咱們就用 show variables like'char%';和 showvariables like 'collation_%';來查看一下:

分別在MYSQL、Navicat中運行命令;

兩邊有些字符集和校對的系統變量是不一樣的。

至此,我找到了問題的關鍵。

最後咱們去解決問題,我有兩種方法:

①咱們以MySQL配置爲準。在Navicat 中運行如下命令:

setcharacter_set_client= utf8;

setcharacter_set_connection =utf8 ;

setcharacter_set_results=utf8 ;

再查看字符集,兩邊就一致了。進行測試,亂碼問題解決。

②保證MySQL字符集配置正確的前提下,在navicat的鏈接屬性中勾選使用MYSQL字符集。

最後才發現本身把本身坑了。

無論怎樣,最後問題解決了,又能夠愉快的工做了。

       

 

如下是我參考的一些文章:

http://www.douban.com/note/268110263/?type=like

http://www.linuxidc.com/Linux/2015-04/116550.htm

相關文章
相關標籤/搜索