作為一個(gè)開(kāi)發(fā)人員,mysql亂碼想必是一個(gè)很常見(jiàn)的問(wèn)題,那么如何去解決呢?
首先,問(wèn)題有可能出現(xiàn)在數(shù)據(jù)庫(kù)上面,mysql 數(shù)據(jù)庫(kù)默認(rèn)是 latin1字符集:

由于表示latin1字符集 如果varchar字段沒(méi)有顯示指定的話也是latin1字符集:

所以我們創(chuàng)建表的時(shí)候要把表設(shè)置成utf8,如果開(kāi)始把表設(shè)置成utf8后,那么這個(gè)表里面的varchar 字段一般都是utf8格式的:

由于表是utf8格式編碼,所以默認(rèn)的varchar字段也是utf8:

這里有個(gè)問(wèn)題需要注意,就是如果開(kāi)始你的數(shù)據(jù)庫(kù)編碼是latin1,然后你插入了一些中文數(shù)據(jù),出現(xiàn)亂碼,然后此時(shí)你把數(shù)據(jù)庫(kù)和對(duì)應(yīng)字段都設(shè)置成了utf8,那么之前的亂碼是還存在的,之后的你再插入數(shù)據(jù)的時(shí)候,就不會(huì)出現(xiàn)亂碼了:

這個(gè)需要注意一下,因此,在創(chuàng)建數(shù)據(jù)庫(kù) 和表的時(shí)候就應(yīng)該把字符集設(shè)置成utf8,這樣可以減少以后的麻煩。
如果你上都弄好了,還是沒(méi)有解決的話,可能是應(yīng)用程序那邊的數(shù)據(jù)庫(kù)驅(qū)動(dòng)沒(méi)有設(shè)置編碼
jdbc.url=jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf8
加上一下編碼設(shè)置就可以了
如果以上都做過(guò)了還是有問(wèn)題的話,執(zhí)行以下命令:
show variables like 'character%';

然后看看是不是有問(wèn)題,如果有問(wèn)題的話,執(zhí)行一下命令:
set names utf8;