轉載自:http://blog.csdn.net/zzh920625/article/details/51226312php
情景再現】html
如圖,在項目中使用MySQL數據庫,在作插入操做時,寫入英文字符沒有問題,可是插入中文的時候數據庫中的數據就像是這樣:java
解決辦法】mysql
(1)無奈之餘,跟了一遍代碼,本覺得是在js方法向Controller傳值中引發了相似於」TypeError」的錯誤,發現跟到了Server端D層數據庫訪問操做都沒有發現有數據傳遞錯誤,So,學習新知識的機會又到了。sql
(2)網上的資料顯示,鏈接mysql庫出現中文亂碼的問題緣由有以下幾個:數據庫
1.mysql自己設定問題,例如還停留在latin1版本;編程
2.table的語系設定問題(包含character與collation);服務器
3.客戶端程式(例如PHP,Java)的連線語系設定問題;學習
對於mysql自己設定的問題,若是是數據庫版本太低致使插入中文失敗,只須要到官網去升級就ok,畢竟mysql是免費的。編碼
而更多的緣由則是:選用的編碼不對或者編碼不一致形成的。對於mysql數據庫和程序代碼的編碼方式的設定,下面詳細分析:
【具體策略】
如上所述,解決中文亂碼的問題:
首先明確MySQL的默認編碼是Latin1,不支持中文,要支持中午須要把數據庫的默認編碼修改成gbk或者utf8。
1、數據庫端編碼設置
一、須要以root用戶身份登錄才能夠查看數據庫編碼方式(以root用戶身份登錄的命令爲:>mysql -uroot –p,以後兩次輸入root用戶的密碼),查看數據庫的編碼方式命令爲:
>show variables like 'character%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database |latin1 |
| character_set_filesystem | binary |
| character_set_results |latin1 |
| character_set_server | latin1 |
| character_set_system |utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
從以上信息可知數據庫的編碼爲latin1,須要修改成gbk或者是utf8(先以utf8爲例);
其中,character_set_client爲客戶端編碼方式;
character_set_connection爲創建鏈接使用的編碼;
character_set_database數據庫的編碼;
character_set_results結果集的編碼;
character_set_server數據庫服務器的編碼;
現將這幾種編碼方式所有改成」utf-8」:
本文僅僅介紹一種最根本的方法:
(1)停止MySQL服務
(2)在MySQL的安裝目錄下找到my.ini,若是沒有就把my-medium.ini複製爲一個my.ini便可
(3)打開my.ini之後,在[client]和[mysqld]下面均加上default-character-set=utf8,保存並關閉
(4)啓動MySQL服務並查詢此時編碼方式:
mysql> show variables like 'character%'; #執行編碼顯示
+--------------------------+----------------------------+
| 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/share/mysql/charsets/ |
當這八種編碼方式編程utf-8的時候,此時mysql數據庫便可插入中文。
2、程序端編碼設置
若是僅僅是作了以上的操做,直接向數據庫中寫入中文沒有問題,可是從程序向數據庫寫入中文可能還會有問題,通過我上午的實驗,總結以下:
(1)多是在HTML頁面中規定了程序的編碼方式,此時修改成」utf-8」便可。
<%@ page language=」C#」 contentType=」text/html; charset=gbk」%>
(2)Server端配置文件連接數據庫端:
<server=192.168.22.***;userid=root;password=123;Charset=utf8;database=>
加入charset的格式」utf-8」便可。若是沒有Charset的字段,手動添加便可。
最好的方法就是整個解決方案裏搜索」Charset」,將其餘編碼方式都統一爲utf-8,由於要支持中午須要把數據庫的默認編碼修改成gbk或者utf8。
總結兩點:一、Mysql編碼方式設置爲支持中文的utf8或者gbk; 二、程序的編碼方式設置成與數據庫同步的utf8或者gbk。
至此,該問題解決完畢,