mysql中文亂碼診斷及解決-這些年我踩過的坑

mysql中文亂碼相信是每一名java web碼農抓耳撓腮又痛心疾首的問題,有病亂投醫,一通搜索,照著網上方法一個又一個的做,“怎么還是特么不行???!”。

實際上從表面現象看,網上的問題和你的問題都是中文出現了亂碼,但病源出在哪,卻各不相同。Ok,別慌張,沉下來心跟我一步步診斷病因,并徹底根除。

聲明:本文旨在幫助大家找出亂碼的原因和解決辦法,具體操作自行百度google。

大原則:數據庫、表和字段、頁面三者的字符集要統一!

首先,(打斷點或者打印一下)查看從dao層取出的數據是否已經亂碼

若已出現亂碼,那問題出現在<b>數據庫編碼</b>、<b>數據庫連接</b>或<b>表和字段的字符集</b>上。

檢查數據庫編碼

<b>mysql默認編碼為latin1,不支持中文。</b>所以需要將數據庫編碼手動修改為gb2312,gbk或utf-8。<b>個人建議使用utf-8,原因是支持繁體中文和一些特殊符號。</b>

命令:
查看數據庫編碼:
<code>show variables like 'character%';</code>
變量說明:
<code>
character_set_client為客戶端編碼方式;
character_set_connection為建立連接使用的編碼;
character_set_database數據庫的編碼;
character_set_results結果集的編碼;
character_set_server數據庫服務器的編碼;
</code>

<i>搜索tip:查看修改mysql編碼方式</i>

如果需要建新數據庫,一定要注意指定編碼。
命令:
<code>
CREATE DATABASE test DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;</code>
但有人說重啟服務器服務后會失效,所以要通過my.ini配置來永久設置。不過本人還沒驗證過,歡迎指教。

檢查數據庫連接設置

這里手動查看吧,設置方式取決于你的數據庫連接配置獲取方式。

如果是寫在代碼里:
<code>
String url="jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8";
</code>

如果是寫在基于xml的配置文件里(如使用Tomcat連接池的context.xml,Hibernate的hibernate.cfg.xml,或iBATIS的sqlMapConfig.xml):

基本xml的連接配置.png

注意二者不同:代碼里參數的連接用&,而xml里參數的連接用& amp;(5個字符,(&、a、m、p、;)中間沒有空格。

<i>連接配置詳情參考官方文檔:
http://dev.mysql.com/doc/connectors/en/connector-j-reference-configuration-properties.html</i>

檢查表和字段的字符集

表一般不需要格外關注。
字段的話,如果是char或varchar指定字符為utf8。

<i>搜索tip:mysql查看修改字段字符集</i>

若沒出現亂碼,那問題便出在前端頁面。

若問題出現在前端頁面,那情況可能會很復雜,但幸好最常見的情況就這幾種:

若為靜態頁面

在<head></head>中加入以下meta,指定字符格式就好了。
<code><meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</code>

若為動態頁面

在jsp最頂端設置字符格式
<code>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
</code>

究極萬能百分之一百萬有效

瀏覽器的編碼格式設為utf-8,啊,有沒有覺得自己傻*了?

<i>搜索tip:jsp頁面中文亂碼</i>

結束語

你的病,好了嗎?

我是驚蟄,立志從搬磚的碼農成長為優秀的程序員.
QQ:623001594

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容