亂碼問題一直是一件讓人頭疼的事情,亂碼就是編碼格式不統一產生的,下面將一些常見的解決思路整理:mysql
先Xshell鏈接上數據庫,查看數據的編碼格式:sql
通常須要看這麼幾個地方(附修改命令):shell
一、數據庫的編碼(4種方式視狀況而定)
1
|
命令一、show variables
like
'character_set_database'
;<br>
|
命令二、show create database 數據庫名;
命令三、show variables like 'collation%';
固然也有更全面的數據庫
命令四、show variables like '%char%';
character_set_client 爲客戶端編碼方式; character_set_connection 爲創建鏈接使用的編碼; character_set_database 數據庫的編碼; character_set_results 結果集的編碼; character_set_server 數據庫服務器的編碼;
修改:服務器
alter database <數據庫名> character set utf8;
二、數據庫表的編碼
show create table 表名;
修改:post
alter table <表名> character set utf8;
三、數據庫表字段的編碼
SHOW FULL COLUMNS FROM 表名;
修改:編碼
mysql>alter table <表名> change <字段名> <字段名> <類型> character set utf8; mysql>alter table user change username username varchar(20) character set utf8 not null; mysql>ALTER TABLE logtest CHANGE title title VARCHAR(100) CHARACTER SET utf8 COLLATE utf8_general_ci;
四、看鏈接數據庫鏈接時的編碼
參考 1.3 / 1.4 便可spa
最多見的是(相似的思路)3d
jdbc:mysql://localhost:3306/Laptop?useUnicode=true&characterEncoding=GBK(編碼格式)
終極大招:
MySql默認編碼是Latin1,不支持中文,要想修改默認編碼,須要修改my.ini文件code
若是以上的方法都沒有解決亂碼問題,那麼你就每次在查庫以前先執行一下下面這條強大的sql語句,而後再進行查庫,通常是不會再出現問題了,
但這裏要聲明一點,「SET NAMES UTF8」做用只是臨時的,MySQL重啓後就恢復默認了。
set names ‘utf8’;
原理:
set names utf8 是用於設置編碼,能夠再在建數據庫的時候設置,也能夠在建立表的時候設置,或只是對部分字段進行設置,並且在設置編碼的時候,
這些地方最好是一致的,這樣能最大程度上避免數據記錄出現亂碼。 執行SET NAMES utf8的效果等同於同時設定以下: SET character_set_client='utf8'; SET character_set_connection='utf8'; SET character_set_results='utf8';
看看這3個變量的做用:信息輸入路徑:client→connection→server;信息輸出路徑:server→connection→results。換句話說,每一個路徑要通過3次改變字符集編碼。以出現亂碼的輸出爲例,server裏utf8的數據,傳入connection轉爲latin1,傳入results轉爲latin1,utf-8頁面又把results轉過來。若是兩種字符集不兼容,好比latin1和utf8,轉化過程就爲不可逆的,破壞性的。