亂碼問題一直是一件讓人頭疼的事情,亂碼就是編碼格式不統一產生的,下面將一些常見的解決思路整理:
先Xshell連接上數據庫,查看數據的編碼格式:
一般需要看這么幾個地方(附修改命令):
1、數據庫的編碼(4種方式視情況而定)
命令1、show variables like 'character_set_database';
命令2、show create database 數據庫名;
命令3、show variables like 'collation%';
當然也有更全面的
命令4、show variables like '%char%';
character_set_client 為客戶端編碼方式;
character_set_connection 為建立連接使用的編碼;
character_set_database 數據庫的編碼;
character_set_results 結果集的編碼;
character_set_server 數據庫服務器的編碼;
修改:
alter database <數據庫名> character set utf8;
2、數據庫表的編碼
show create table 表名;
修改:
alter table <表名> character set utf8;
3、數據庫表字段的編碼
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;
4、看連接數據庫連接時的編碼
參考 1.3 / 1.4 即可
最常見的是(類似的思路)
jdbc:mysql://localhost:3306/Laptop?useUnicode=true&characterEncoding=GBK(編碼格式)
終極大招:
MySql默認編碼是Latin1,不支持中文,要想修改默認編碼,需要修改my.ini文件
如果以上的方法都沒有解決亂碼問題,那么你就每次在查庫之前先執行一下下面這條強大的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,轉化過程就為不可逆的,破壞性的。