mysql字符集亂碼探究

環(huán)境描述:青云的MySQL實(shí)例的ip為:192.168.0.254,和青云的跳板主機(jī),我們?cè)谔逯鳈C(jī)上安裝了mysql服務(wù),并通過下面方式連接mysql:
[root@i-iivphroy ~]# mysql -uroot -p********* -h292.168.0.254
問題描述:近期網(wǎng)站整體遷云,需要先遷移一部分?jǐn)?shù)據(jù)到云,采用mysqldump的方法,可是在云上source完成之后,卻發(fā)現(xiàn)中文亂碼。
一:查看源端mysql的相關(guān)信息。
1:查看源端mysql的表的字符集,為utf8.
mysql> show create table v_publish_info;
。
。
。
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;
2:查看mysql關(guān)于字符集的參數(shù),
MariaDB [log]> show variables like 'collation_%';
+----------------------+-----------------+
| Variable_name | Value |
+----------------------+-----------------+
| collation_connection | utf8_general_ci |
| collation_database | utf8_general_ci |
| collation_server | utf8_general_ci |
+----------------------+-----------------+
3 rows in set (0.00 sec)
MariaDB [log]> show variables like 'character_set_%';
+--------------------------+------------------------+
| Variable_name | Value |
+--------------------------+------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /mysql/share/charsets/ |
二:查看目標(biāo)云端的相關(guān)信息
1,查看目標(biāo)端mysql的表的字符集,為utf8.
mysql> show create table v_publish_info;
。
。
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;
2,查看mysql關(guān)于字符集的參數(shù),發(fā)現(xiàn)是latin1
mysql> show variables like 'character_set_%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | latin1 |
| character_set_server | latin1 |
| character_set_system | latin1 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)
mysql> show variables like 'collation_%';
+----------------------+-------------------+
| Variable_name | Value |
+----------------------+-------------------+
| collation_connection | latin1_swedish_ci |
| collation_database | latin1_general_ci |
| collation_server | latin1_general_ci |
+----------------------+-------------------+
3 rows in set (0.01 sec)
原來是青云的mysql默認(rèn)的字符集相關(guān)參數(shù)是latin1,但是我們的表是utf8,這導(dǎo)致亂碼,驗(yàn)證:
在云端修改參數(shù),都改成utf8,也就是改成和源端一樣,
mysql> set character_set_client=utf8 ;
mysql> set character_set_connection =utf8 ;
。
。
mysql> set collation_server =utf8_general_ci ;
再次查看數(shù)據(jù),中文不再亂碼:
mysql> select title from v_publish_info limit 2;
+-----------------------------------------------------------------------------------------------------------------+
| title |
+-----------------------------------------------------------------------------------------------------------------+
| 即墨省級(jí)經(jīng)濟(jì)開發(fā)區(qū)藍(lán)色新區(qū)管理委員會(huì)關(guān)于體育中心銅鋁復(fù)合散熱器邀請(qǐng)報(bào)價(jià)的函 |
| 2015年招投標(biāo)領(lǐng)域十大關(guān)鍵詞 |
+-----------------------------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)
既然確定了就是這些參數(shù)導(dǎo)致的問題,那么接下來開始解決問題,前面修改的參數(shù),僅僅是在當(dāng)前會(huì)話生效的,新開session無效,于是通過控制臺(tái)修改mysql的參數(shù),
character_set_server=utf8
然后重啟mysql實(shí)例,然后再次查看mysql的數(shù)據(jù),發(fā)現(xiàn)依舊亂碼,
mysql> select title from v_publish_info limit 2;
+---------------------------------------+
| title |
+---------------------------------------+
| ????????????????????????????????????? |
| 2015??????????? |
+---------------------------------------+
2 rows in set (0.00 sec)
再次查看相關(guān)參數(shù):發(fā)現(xiàn)還有 latin1
mysql> show variables like 'character_set_%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | latin1 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)
mysql> show variables like 'collation_%';
+----------------------+-------------------+
| Variable_name | Value |
+----------------------+-------------------+
| collation_connection | latin1_swedish_ci |
| collation_database | utf8_general_ci |
| collation_server | utf8_general_ci |
+----------------------+-------------------+
3 rows in set (0.00 sec)
我們已經(jīng)把mysql服務(wù)端的相關(guān)參數(shù)修改了,剩下的是clint端的參數(shù),我們是通過下面方式連接數(shù)據(jù)庫的,也就是說mysql并沒有在這臺(tái)服務(wù)器上,而是在192.168.0.254上面的。
[root@i-iivphroy ~]# mysql -uroot -p********* -h292.168.0.254
突然想到那這臺(tái)跳板機(jī)就相當(dāng)于是客戶端了,這里面也有my.cnf的配置文件,嘗試去修改這里,如下紅色部分,是設(shè)置客戶端的參數(shù)的:
[root@i-iivphroy ~]# cat /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
#[mysqld]
#default-character-set=utf8
#init_connect = 'SET NAMES utf8'
[client]
default-character-set=utf8
然后從新登錄數(shù)據(jù)庫:
[root@i-iivphroy ~]# mysql -uroot -p********* -h292.168.0.254
再次查看相關(guān)參數(shù),徹底和源端一樣了:
mysql> show variables like 'collation_%';
+----------------------+-----------------+
| Variable_name | Value |
+----------------------+-----------------+
| collation_connection | utf8_general_ci |
| collation_database | utf8_general_ci |
| collation_server | utf8_general_ci |
+----------------------+-----------------+
3 rows in set (0.01 sec)
mysql> show variables like 'character_set_%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)
再次查看數(shù)據(jù),不在亂碼:
mysql> select title from v_publish_info limit 2;
+-----------------------------------------------------------------------------------------------------------------+
| title |
+-----------------------------------------------------------------------------------------------------------------+
| 即墨省級(jí)經(jīng)濟(jì)開發(fā)區(qū)藍(lán)色新區(qū)管理委員會(huì)關(guān)于體育中心銅鋁復(fù)合散熱器邀請(qǐng)報(bào)價(jià)的函 |
| 2015年招投標(biāo)領(lǐng)域十大關(guān)鍵詞 |
+-----------------------------------------------------------------------------------------------------------------+
下面講解下這幾個(gè)參數(shù)
系統(tǒng)變量:
– character_set_server:默認(rèn)的內(nèi)部操作字符集
– character_set_client:客戶端來源數(shù)據(jù)使用的字符集
– character_set_connection:連接層字符集
– character_set_results:查詢結(jié)果字符集
– character_set_database:當(dāng)前選中數(shù)據(jù)庫的默認(rèn)字符集
– character_set_system:系統(tǒng)元數(shù)據(jù)(字段名等)字符集
– 還有以collation_開頭的同上面對(duì)應(yīng)的變量,用來描述字符序。
1.庫、表、列字符集的由來:
(1).建庫時(shí),若未明確指定字符集,則采用character_set_server指定的字符集。
(2).建表時(shí),若未明確指定字符集,則采用當(dāng)前庫所采用的字符集。
(3).新增,修改表字段時(shí),若未明確指定字符集,則采用當(dāng)前表所采用的字符集。
2.更新、查詢涉及到得字符集變量:
用戶在更新(插入,刪除,修改),查詢數(shù)據(jù)庫時(shí),最常使用的字符集變量主要包含:character_set_client,character_set_connection,character_set_result。
(1)更新流程字符集轉(zhuǎn)換過程:character_set_client------->character_set_connection----->表字符集。
(2)查詢流程字符集轉(zhuǎn)換過程:表字符集------->character_set_result
總結(jié):通過這次解決問題的過程,修正了我原來的認(rèn)識(shí),原來數(shù)據(jù)庫的參數(shù),可以通過修改客戶端(數(shù)據(jù)庫沒在這個(gè)服務(wù)器上)的配置文件my.cnf來改變,并且了解到了查詢一條數(shù)據(jù),需要把表的字符集轉(zhuǎn)換成character_set_result的字符集,亂碼你就修改這個(gè)character_set_result參數(shù)即可。并且mysql數(shù)據(jù)庫的my.cnf最好設(shè)置上如下兩個(gè)參數(shù):
[mysqld]
default-character-set=utf8
[client]
default-character-set=utf8

標(biāo)題名稱:mysql字符集亂碼探究
網(wǎng)站網(wǎng)址:http://bm7419.com/article18/gijegp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供關(guān)鍵詞優(yōu)化、小程序開發(fā)商城網(wǎng)站、網(wǎng)站設(shè)計(jì)、企業(yè)建站、做網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站網(wǎng)頁設(shè)計(jì)