mysql資料庫中字符集亂碼問題原因及解決
前言
有的時候我們在檢視資料庫資料時,會看到亂碼。實際上,無論何種資料庫只要出現亂碼問題,這大多是由於資料庫字符集設定的問題。
下面我們就介紹一下,資料庫的字符集的設定及亂碼問題的解決。
mysql資料庫的字符集
直白的說,字元就像是單個的文字,編碼就像是給每個文字的編號,字符集就像是字元與編碼的集合,校驗規則就是字符集的對應的排序規則,字符集加上對應的校驗規則就是語言。(每種字符集可以有多種校對規則,但都有一個預設的校對規則)
mysql資料庫可以通過設定字符集,來使用對應的字符集和檢驗規則來組織字元。就像是解讀一片文章的時候用那種語言來解析。例如:中國人常使用的utf8編碼,代表的是中文。
mysql可以支援多種字符集。在同一個資料庫的不同表,同一個表中的不同欄位,都可以指定使用不同的字符集。
mysql的字符集規則
mysql可以設定的字符集:
- 伺服器的字符集
- 資料庫的字符集
- 表的字符集字
- 段的字符集
如果在某一個級別沒有設定字符集,則它會繼承其上一級的字符集。
mysql資料庫亂碼問題解決方法(即修改字符集方法)
【1】檢視mysql支援的字符集
show character set;
【2】檢視資料庫編碼
show variables like 'character_set%';
【3】檢視當前mysql使用的字符集
show variables like 'character%';
解析:
character_set_client:客戶端請求資料的字符集
character_set_connection:客戶機與伺服器連線的字符集
character_set_database:預設資料庫的字符集;如果沒有預設資料庫,就會使用 character_set_server指定的字符集(建議不要隨意更改)
character_set_filesystem:把 character_set_client轉換character_set_filesystem (預設為binary,不做任何轉換)
character_set_results:返回給客戶端的字符集
character_set_server:資料庫伺服器的預設字符集
character_set_system:系統字符集,預設utf8。(用於資料庫的表、列和儲存在目錄表中函式的名字)
character_sets_dir:mysql字符集檔案的儲存路徑
產生亂碼的原因
character_set_client與實際不符合
character_set_results與客戶端頁面不符合
【4】檢視當前資料庫的校對規則
show variables like 'collation%';
解析:
value的命名規則: 字符集名字+語言+字尾
collation_connection :當前連線的字符集
collation_database :當前日期的預設校對
collation_server :伺服器的預設校對
字尾的含義:
ci:不區分大小寫
cs:區分大小寫
bin:二進位制排序
【5】更改字符集
解決亂碼問題(一般如下)
<1>臨時(只在當前生效,退出後重新進入恢復原來設定)
set character_set_client = 'utf8'; set character_set_connection = 'utf8'; set character_set_results = 'utf8';
或
set names utf8;
<2>永久(修改完配置檔案,需重啟mysql)
在mysql的my.cnf的配置檔案中修改或新增下列:
[client] default-character-set = utf8 [mysqld] character_set_server = utf8 [mysql] default-character-set = utf8
備註
<1>
關於mysqld下面的引數,使用mysql5.5驗證後,下方的寫法都可,並非下劃線原因導致的修改不成功:
character_set_server = utf8 character-set-server = utf8
<2>
關於配置檔案的修改,有時候由於是編譯安裝,因此mysql的配置檔案,不一定是/etc/my.cnf,因此修改後也不會成功。
<3>
修改完配置檔案,並重啟mysql後。請檢視一下,是否字符集和校對規則如下:
如下即為成功,如果是使用Navicat等第3方工具連線,中文仍有亂碼,修改一下工具的編碼試試
到此這篇關於mysql資料庫中字符集亂碼問題原因及解決的文章就介紹到這了,更多相關mysql資料庫字符集亂碼問內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!