我們經常會遇到一些向MySQL數據庫中插入中文,但是select出來的時候,卻發現是亂碼的情況。如我們向表a出入這樣一段記錄:i
a (,);
可能當你訪問它的時候,會發現他的結果變成如下圖所示:
要解決字符集的問題,首先要知道現在的系統、數據庫、表、客戶端等使用什麼樣的字符集,以及系統支持什麼字符集等,下面介紹一些獲取相關信息的語句:
1.查看數據庫支持的所有字符集
show ;或者show ;
2.查看當前狀態,裡面當然包括字符集的設置:
status或者\s
3.查看系統字符集設置,包括所有的字符集設置:
show variables ;
得出如何所示結果:
4.查看數據表中字符集設置:
show columns tablename;
5.查看數據庫編碼:
show dbname;
知道了怎麼查找字符集的相關信息之後,我們就要懂得怎麼在創建指定對象的時候,為該對象匹配相應的字符集。
1.服務器級:
在安裝MySQL時可以設置服務器的默認編碼格式,也可對my.ini做修改,修改[mysqld]裡面的character_set_server=utf8,則可設置character_set_server的值。
2.數據庫級:
utf8;
3.表級:
``.`tb_name` (id () ,name () ) ENGINEInnoDB CHARSETutf8;
從下圖可看出,定義表的默認字符集為utf8,即使character_set_database為gbk,但是表的列都未utf8
4.列級:
``.`tb_name` ( id () , name () utf8 );
從下圖可以看到,整個表的默認字符集為gbk,所以沒有指定字符集的列都用默認的字符集,而指定了字符集的列name,則使用指定的字符集utf8。
如果已經是創建好的對象,那又應該如何處理呢。我們就應該對指定對象就行修改字符集的操作。
對於某一個連接來說,可以使用:
NAMES
相當於
character_set_client character_set_results character_set_connection charset_name;
另外、還可以修改配置文件,對[mysql]下增加default-character-set=utf8,配置成你想要的字符集。(個人嘗試在my.ini裡面配置過,沒有成效,不知道是不是被使用的客戶端想要的字符集給覆蓋掉了呢?)
COLLATE collation_name]
最簡單的方法是直接改my.ini配置文件裡面[mysqld]的字段,增加character-set-server=gbk,然後重啟mysqld,則可改為你想要的字符集。
{ } (
例如:
(
MySQL的Character Set Support: http://dev.mysql.com/doc/refman/5.6/en/charset.html
mysql常用查看庫,表字符集命令: http://bjlfp.blog.163.com/blog/static/773684612012298455765/
MySQL 插入數據時,中文亂碼問題的解決: http://www.cnblogs.com/sunzn/archive/2013/03/14/2960248.html