前言
有的時候我們在查看數(shù)據(jù)庫數(shù)據(jù)時,會看到亂碼。實際上,無論何種數(shù)據(jù)庫只要出現(xiàn)亂碼問題,這大多是由于數(shù)據(jù)庫字符集設(shè)定的問題。
下面我們就介紹一下,數(shù)據(jù)庫的字符集的設(shè)定及亂碼問題的解決。
mysql數(shù)據(jù)庫的字符集
直白的說,字符就像是單個的文字,編碼就像是給每個文字的編號,字符集就像是字符與編碼的集合,校驗規(guī)則就是字符集的對應(yīng)的排序規(guī)則,字符集加上對應(yīng)的校驗規(guī)則就是語言。(每種字符集可以有多種校對規(guī)則,但都有一個默認的校對規(guī)則)
mysql數(shù)據(jù)庫可以通過設(shè)定字符集,來使用對應(yīng)的字符集和檢驗規(guī)則來組織字符。就像是解讀一片文章的時候用那種語言來解析。例如:中國人常使用的utf8編碼,代表的是中文。
mysql可以支持多種字符集。在同一個數(shù)據(jù)庫的不同表,同一個表中的不同字段,都可以指定使用不同的字符集。
mysql的字符集規(guī)則
mysql可以設(shè)定的字符集:
- 服務(wù)器的字符集
- 數(shù)據(jù)庫的字符集
- 表的字符集字
- 段的字符集
如果在某一個級別沒有設(shè)置字符集,則它會繼承其上一級的字符集。
mysql數(shù)據(jù)庫亂碼問題解決方法(即修改字符集方法)
【1】查看mysql支持的字符集
【2】查看數(shù)據(jù)庫編碼
show variables like 'character_set%';
【3】查看當(dāng)前mysql使用的字符集
show variables like 'character%';
解析:
character_set_client:客戶端請求數(shù)據(jù)的字符集
character_set_connection:客戶機與服務(wù)器連接的字符集
character_set_database:默認數(shù)據(jù)庫的字符集;如果沒有默認數(shù)據(jù)庫,就會使用 character_set_server指定的字符集(建議不要隨意更改)
character_set_filesystem:把 character_set_client轉(zhuǎn)換character_set_filesystem (默認為binary, 不做任何轉(zhuǎn)換)
character_set_results:返回給客戶端的字符集
character_set_server:數(shù)據(jù)庫服務(wù)器的默認字符集
character_set_system:系統(tǒng)字符集,默認utf8。(用于數(shù)據(jù)庫的表、列和存儲在目錄表中函數(shù)的名字)
character_sets_dir:mysql字符集文件的保存路徑
產(chǎn)生亂碼的原因
character_set_client與實際不符合
character_set_results與客戶端頁面不符合
【4】查看當(dāng)前數(shù)據(jù)庫的校對規(guī)則
show variables like 'collation%';
解析:
value的命名規(guī)則: 字符集名字+語言+后綴
collation_connection :當(dāng)前連接的字符集
collation_database :當(dāng)前日期的默認校對
collation_server :服務(wù)器的默認校對
后綴的含義:
ci:不區(qū)分大小寫
cs:區(qū)分大小寫
bin:二進制排序
【5】更改字符集
解決亂碼問題(一般如下)
1>臨時(只在當(dāng)前生效,退出后重新進入恢復(fù)原來設(shè)置)
set character_set_client = 'utf8';
set character_set_connection = 'utf8';
set character_set_results = 'utf8';
或
2>永久(修改完配置文件,需重啟mysql)
在mysql的my.cnf的配置文件中修改或添加下列:
[client]
default-character-set = utf8
[mysqld]
character_set_server = utf8
[mysql]
default-character-set = utf8
備注
1>
關(guān)于mysqld下面的參數(shù),使用mysql5.5驗證后,下方的寫法都可,并非下劃線原因?qū)е碌男薷牟怀晒Γ?/p>
character_set_server = utf8
character-set-server = utf8
2>
關(guān)于配置文件的修改,有時候由于是編譯安裝,因此mysql的配置文件,不一定是/etc/my.cnf,因此修改后也不會成功。
3>
修改完配置文件,并重啟mysql后。請查看一下,是否字符集和校對規(guī)則如下:
如下即為成功,如果是使用Navicat等第3方工具連接,中文仍有亂碼,修改一下工具的編碼試試
到此這篇關(guān)于mysql數(shù)據(jù)庫中字符集亂碼問題原因及解決的文章就介紹到這了,更多相關(guān)mysql數(shù)據(jù)庫字符集亂碼問內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
您可能感興趣的文章:- MySQL查看與修改字符集的方法實例教程
- 如何修改MySQL字符集
- MySQL字符集utf8修改為utf8mb4的方法步驟
- mysql如何在已有數(shù)據(jù)庫上統(tǒng)一字符集
- MySQL字符集亂碼及解決方案分享
- 詳解JDBC對Mysql utf8mb4字符集的處理
- MySQL中因字段字符集不同導(dǎo)致索引不能命中的解決方法
- MAC下修改mysql默認字符集為utf8的方法
- Docker下mysql設(shè)置字符集的方法
- 關(guān)于mysql查詢字符集不匹配問題的解決方法
- 詳解mysql中的字符集和校驗規(guī)則