十年網(wǎng)站開發(fā)經(jīng)驗 + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊
量身定制 + 運營維護(hù)+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
今天開發(fā)反應(yīng)兩樣的程序往一個庫里面插入數(shù)據(jù)正常,往另外一個庫里面插入數(shù)據(jù)有亂碼。第一反應(yīng)就是兩個數(shù)據(jù)庫關(guān)于字符集的配置不一樣。
創(chuàng)新互聯(lián)長期為上千客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊從業(yè)經(jīng)驗10年,關(guān)注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為伽師企業(yè)提供專業(yè)的做網(wǎng)站、成都網(wǎng)站建設(shè),伽師網(wǎng)站改版等技術(shù)服務(wù)。擁有十多年豐富建站經(jīng)驗和眾多成功案例,為您定制開發(fā)。
在兩個庫分別查看參數(shù):
show variables like "%char%";
+--------------------------+------------------------------------------+
| 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 | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/local/MySQL/share/charsets/ |
+--------------------------+------------------------------------------+
>show variables like "%char%";
+--------------------------+------------------------------------------+
| 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/local/mysql/share/charsets/ |
+--------------------------+------------------------------------------+
可以看到character_set_server的參數(shù)配置不一樣,于是將有問題的那個庫配置成utf8,開發(fā)再次測試的時候表示還有亂碼問題,這時想起來校驗字符集沒有改,于是分別查看兩邊校驗字符集的差異:
>show variables like "%coll%";
+----------------------+-------------------+
| Variable_name | Value |
+----------------------+-------------------+
| collation_connection | utf8_general_ci |
| collation_database | utf8_general_ci |
| collation_server | latin1_swedish_ci |
+----------------------+-------------------+
>show variables like "%coll%";
+----------------------+-----------------+
| Variable_name | Value |
+----------------------+-----------------+
| collation_connection | utf8_general_ci |
| collation_database | utf8_general_ci |
| collation_server | utf8_general_ci |
+----------------------+-----------------+
可以看到collation_server 參數(shù)設(shè)置不一致,于是把這個參數(shù)也改成了utf8,再次測試的時候數(shù)據(jù)顯示正常。
mysql支持多個層次的字符集設(shè)置:
服務(wù)層(server)、數(shù)據(jù)庫層(database)、數(shù)據(jù)表(table)、字段(column)、連接(connection)、結(jié)果集(result)
優(yōu)先級:server > database > table > column
為了避免出現(xiàn)因字符不一致導(dǎo)致的中文亂碼的問題,最好就是將字符集全部設(shè)置成一樣的。
另外提一下skip-character-set-client-handshake這個參數(shù),可以通過開啟這個參數(shù)來過濾客戶端設(shè)置的字符集