mysql數(shù)據(jù)庫(kù)中字符集亂碼問(wèn)題原因及解決
前言
有的時(shí)候我們?cè)诓榭磾?shù)據(jù)庫(kù)數(shù)據(jù)時(shí),會(huì)看到亂碼。實(shí)際上,無(wú)論何種數(shù)據(jù)庫(kù)只要出現(xiàn)亂碼問(wèn)題,這大多是由于數(shù)據(jù)庫(kù)字符集設(shè)定的問(wèn)題。
下面我們就介紹一下,數(shù)據(jù)庫(kù)的字符集的設(shè)定及亂碼問(wèn)題的解決。
mysql數(shù)據(jù)庫(kù)的字符集
直白的說(shuō),字符就像是單個(gè)的文字,編碼就像是給每個(gè)文字的編號(hào),字符集就像是字符與編碼的集合,校驗(yàn)規(guī)則就是字符集的對(duì)應(yīng)的排序規(guī)則,字符集加上對(duì)應(yīng)的校驗(yàn)規(guī)則就是語(yǔ)言。(每種字符集可以有多種校對(duì)規(guī)則,但都有一個(gè)默認(rèn)的校對(duì)規(guī)則)
mysql數(shù)據(jù)庫(kù)可以通過(guò)設(shè)定字符集,來(lái)使用對(duì)應(yīng)的字符集和檢驗(yàn)規(guī)則來(lái)組織字符。就像是解讀一片文章的時(shí)候用那種語(yǔ)言來(lái)解析。例如:中國(guó)人常使用的utf8編碼,代表的是中文。
mysql可以支持多種字符集。在同一個(gè)數(shù)據(jù)庫(kù)的不同表,同一個(gè)表中的不同字段,都可以指定使用不同的字符集。
mysql的字符集規(guī)則
mysql可以設(shè)定的字符集:
- 服務(wù)器的字符集
- 數(shù)據(jù)庫(kù)的字符集
- 表的字符集字
- 段的字符集
如果在某一個(gè)級(jí)別沒(méi)有設(shè)置字符集,則它會(huì)繼承其上一級(jí)的字符集。
mysql數(shù)據(jù)庫(kù)亂碼問(wèn)題解決方法(即修改字符集方法)
【1】查看mysql支持的字符集
show character set;

【2】查看數(shù)據(jù)庫(kù)編碼
show variables like 'character_set%';

【3】查看當(dāng)前mysql使用的字符集
show variables like 'character%';

解析:
character_set_client:客戶端請(qǐng)求數(shù)據(jù)的字符集
character_set_connection:客戶機(jī)與服務(wù)器連接的字符集
character_set_database:默認(rèn)數(shù)據(jù)庫(kù)的字符集;如果沒(méi)有默認(rèn)數(shù)據(jù)庫(kù),就會(huì)使用 character_set_server指定的字符集(建議不要隨意更改)
character_set_filesystem:把 character_set_client轉(zhuǎn)換character_set_filesystem (默認(rèn)為binary, 不做任何轉(zhuǎn)換)
character_set_results:返回給客戶端的字符集
character_set_server:數(shù)據(jù)庫(kù)服務(wù)器的默認(rèn)字符集
character_set_system:系統(tǒng)字符集,默認(rèn)utf8。(用于數(shù)據(jù)庫(kù)的表、列和存儲(chǔ)在目錄表中函數(shù)的名字)
character_sets_dir:mysql字符集文件的保存路徑
產(chǎn)生亂碼的原因
character_set_client與實(shí)際不符合
character_set_results與客戶端頁(yè)面不符合
【4】查看當(dāng)前數(shù)據(jù)庫(kù)的校對(duì)規(guī)則
show variables like 'collation%';

解析:
value的命名規(guī)則: 字符集名字+語(yǔ)言+后綴
collation_connection :當(dāng)前連接的字符集
collation_database :當(dāng)前日期的默認(rèn)校對(duì)
collation_server :服務(wù)器的默認(rèn)校對(duì)
后綴的含義:
ci:不區(qū)分大小寫(xiě)
cs:區(qū)分大小寫(xiě)
bin:二進(jìn)制排序
【5】更改字符集
解決亂碼問(wèn)題(一般如下)
<1>臨時(shí)(只在當(dāng)前生效,退出后重新進(jìn)入恢復(fù)原來(lái)設(shè)置)
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>
關(guān)于mysqld下面的參數(shù),使用mysql5.5驗(yàn)證后,下方的寫(xiě)法都可,并非下劃線原因?qū)е碌男薷牟怀晒Γ?/p>
character_set_server = utf8 character-set-server = utf8
<2>
關(guān)于配置文件的修改,有時(shí)候由于是編譯安裝,因此mysql的配置文件,不一定是/etc/my.cnf,因此修改后也不會(huì)成功。
<3>
修改完配置文件,并重啟mysql后。請(qǐng)查看一下,是否字符集和校對(duì)規(guī)則如下:
如下即為成功,如果是使用Navicat等第3方工具連接,中文仍有亂碼,修改一下工具的編碼試試


到此這篇關(guān)于mysql數(shù)據(jù)庫(kù)中字符集亂碼問(wèn)題原因及解決的文章就介紹到這了,更多相關(guān)mysql數(shù)據(jù)庫(kù)字符集亂碼問(wèn)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
mysql8.0 windows x64 zip包安裝配置教程
這篇文章主要為大家詳細(xì)介紹了mysql8.0 windows x64 zip包安裝配置教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-05-05
Django2.* + Mysql5.7開(kāi)發(fā)環(huán)境整合教程圖解
這篇文章主要介紹了Django2.* + Mysql5.7開(kāi)發(fā)環(huán)境整合教程,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-09-09
在linux中導(dǎo)入sql文件的方法分享(使用命令行轉(zhuǎn)移mysql數(shù)據(jù)庫(kù))
為使用阿里云主機(jī),沒(méi)有裝ftp,也沒(méi)有裝phpmyadmin,所以一切都得靠命令行。轉(zhuǎn)移網(wǎng)站的重要一步就是轉(zhuǎn)移數(shù)據(jù)庫(kù),這里簡(jiǎn)單介紹一下如何在這種情況下導(dǎo)入sql文件2014-02-02
MySQL利用profile分析慢sql詳解(group left join效率高于子查詢)
最近因?yàn)橐粋€(gè)用了子查詢的sql語(yǔ)句查詢很慢,嚴(yán)重影響了性能,所以需要進(jìn)行優(yōu)化,下面這篇文章主要跟大家介紹了關(guān)于MySQL利用profile分析慢sql的相關(guān)資料,文中介紹的非常詳細(xì),需要的朋友們可以參考借鑒,下面來(lái)一起看看吧。2017-03-03

