mysql中文亂碼相信是每一名java web碼農(nóng)抓耳撓腮又痛心疾首的問題炎功,有病亂投醫(yī),一通搜索缓溅,照著網(wǎng)上方法一個(gè)又一個(gè)的做蛇损,“怎么還是特么不行?L彻帧淤齐!”。
實(shí)際上從表面現(xiàn)象看袜匿,網(wǎng)上的問題和你的問題都是中文出現(xiàn)了亂碼更啄,但病源出在哪,卻各不相同沉帮。Ok锈死,別慌張,沉下來心跟我一步步診斷病因穆壕,并徹底根除待牵。
聲明:本文旨在幫助大家找出亂碼的原因和解決辦法,具體操作自行百度google喇勋。
大原則:數(shù)據(jù)庫缨该、表和字段、頁面三者的字符集要統(tǒng)一川背!
首先贰拿,(打斷點(diǎn)或者打印一下)查看從dao層取出的數(shù)據(jù)是否已經(jīng)亂碼
若已出現(xiàn)亂碼,那問題出現(xiàn)在<b>數(shù)據(jù)庫編碼</b>熄云、<b>數(shù)據(jù)庫連接</b>或<b>表和字段的字符集</b>上膨更。
檢查數(shù)據(jù)庫編碼
<b>mysql默認(rèn)編碼為latin1,不支持中文缴允。</b>所以需要將數(shù)據(jù)庫編碼手動(dòng)修改為gb2312荚守,gbk或utf-8。<b>個(gè)人建議使用utf-8练般,原因是支持繁體中文和一些特殊符號矗漾。</b>
命令:
查看數(shù)據(jù)庫編碼:
<code>show variables like 'character%';</code>
變量說明:
<code>
character_set_client為客戶端編碼方式;
character_set_connection為建立連接使用的編碼薄料;
character_set_database數(shù)據(jù)庫的編碼敞贡;
character_set_results結(jié)果集的編碼;
character_set_server數(shù)據(jù)庫服務(wù)器的編碼摄职;
</code>
<i>搜索tip:查看修改mysql編碼方式</i>
如果需要建新數(shù)據(jù)庫誊役,一定要注意指定編碼。
命令:
<code>
CREATE DATABASE test
DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;</code>
但有人說重啟服務(wù)器服務(wù)后會(huì)失效谷市,所以要通過my.ini配置來永久設(shè)置势木。不過本人還沒驗(yàn)證過,歡迎指教歌懒。
檢查數(shù)據(jù)庫連接設(shè)置
這里手動(dòng)查看吧啦桌,設(shè)置方式取決于你的數(shù)據(jù)庫連接配置獲取方式。
如果是寫在代碼里:
<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):
注意二者不同:代碼里參數(shù)的連接用&,而xml里參數(shù)的連接用& amp;(5個(gè)字符验烧,(&板驳、a、m碍拆、p若治、;)中間沒有空格慨蓝。
<i>連接配置詳情參考官方文檔:
http://dev.mysql.com/doc/connectors/en/connector-j-reference-configuration-properties.html</i>
檢查表和字段的字符集
表一般不需要格外關(guān)注。
字段的話端幼,如果是char或varchar指定字符為utf8礼烈。
<i>搜索tip:mysql查看修改字段字符集</i>
若沒出現(xiàn)亂碼,那問題便出在前端頁面婆跑。
若問題出現(xiàn)在前端頁面此熬,那情況可能會(huì)很復(fù)雜,但幸好最常見的情況就這幾種:
若為靜態(tài)頁面
在<head></head>中加入以下meta滑进,指定字符格式就好了犀忱。
<code><meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</code>
若為動(dòng)態(tài)頁面
在jsp最頂端設(shè)置字符格式
<code>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
</code>
究極萬能百分之一百萬有效
瀏覽器的編碼格式設(shè)為utf-8,啊扶关,有沒有覺得自己傻*了阴汇?
<i>搜索tip:jsp頁面中文亂碼</i>
結(jié)束語
你的病,好了嗎节槐?
我是驚蟄鲫寄,立志從搬磚的碼農(nóng)成長為優(yōu)秀的程序員.
QQ:623001594