日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
MySQL亂碼問題如何排查

MySQL客戶端和服務(wù)器是怎么通信的?

1.首先請求會被MySQL客戶端編碼為字節(jié)序列之后通過網(wǎng)絡(luò)傳輸?shù)椒?wù)器。

10多年的霍爾果斯網(wǎng)站建設(shè)經(jīng)驗,針對設(shè)計、前端、開發(fā)、售后、文案、推廣等六對一服務(wù),響應快,48小時及時工作處理。營銷型網(wǎng)站建設(shè)的優(yōu)勢是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動調(diào)整霍爾果斯建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計,從而大程度地提升瀏覽體驗。創(chuàng)新互聯(lián)從事“霍爾果斯網(wǎng)站設(shè)計”,“霍爾果斯網(wǎng)站推廣”以來,每個客戶項目都認真落實執(zhí)行。

對于MySQL自帶的客戶端來說,這個編碼過程使用的字符集和我們使用的操作系統(tǒng)的默認字符集是一樣的,類Unix系統(tǒng)的默認字符集就是utf8,Windows系統(tǒng)的默認字符集就是gbk。

啟動MySQL客戶端時,MySQL客戶端就會檢測到這個操作系統(tǒng)使用的是utf8字符集,并將客戶端默認字符集設(shè)置為utf8。如果MySQL不支持自動檢測到的操作系統(tǒng)當前正在使用的字符集,或者在某些情況下不允許自動檢測的話,MySQL會使用它自己的內(nèi)建的默認字符集作為客戶端默認字符集。這個內(nèi)建的默認字符集在MySQL 5.7以及之前的版本中是latin1,在MySQL 8.0中修改為了utf8mb4。

如果我們在啟動MySQL客戶端是使用了default-character-set啟動參數(shù),那么客戶端的默認字符集將不再檢測操作系統(tǒng)當前正在使用的字符集,而是直接使用啟動參數(shù)default-character-set所指定的值。比方說我們使用如下命令來啟動客戶端:

mysql --default-character-set=utf8

那么不論我們使用什么操作系統(tǒng),操作系統(tǒng)目前使用的字符集是什么,我們都將會以utf8作為MySQL客戶端的默認字符集。

2.服務(wù)器收到字節(jié)序列請求之后,會認為該字節(jié)串是按照character_set_client系統(tǒng)變量編碼的,之后將其從character_set_client轉(zhuǎn)換到character_set_connection,再進行更深入的處理。

3.最后將響應發(fā)送至客戶端時,又會按照character_set_results進行編碼。

4.客戶端收到響應字節(jié)串之后,按照本客戶端規(guī)定的字符集進行解碼。

對于MySQL自帶的客戶端來說,這個解碼過程使用的字符集和我們使用的操作系統(tǒng)的默認字符集是一樣的,類Unix系統(tǒng)的默認字符集就是utf8,Windows系統(tǒng)的默認字符集就是gbk。

系統(tǒng)變量

描述

MySQL客戶端字符集

MySQL客戶端字符集

character_set_client

服務(wù)器解碼請求時使用的字符集

(服務(wù)器認為請求是按照該系統(tǒng)變量指定的字符集進行編碼的)

character_set_connection

服務(wù)器處理請求時會把請求字符串從character_set_client轉(zhuǎn)為character_set_connection

character_set_results

服務(wù)器向客戶端返回數(shù)據(jù)時使用的字符集

(服務(wù)器采用該系統(tǒng)變量指定的字符集對返回給客戶端的字符串進行編碼)

從通信轉(zhuǎn)碼流程來看,要保證沒有亂碼出現(xiàn):

character_set_client、character_set_connection和character_set_result這三個系統(tǒng)變量應該和客戶端的默認字符集相同即可。

SET names命令可以一次性修改這三個系統(tǒng)變量。

實驗驗證

數(shù)據(jù)庫字符集:

1.客戶端發(fā)送請求時會將字符'我'按照utf8進行編碼,也就是:0xE68891。

2.服務(wù)器收到請求后發(fā)現(xiàn)有前綴_gbk,則不會將其后邊的字節(jié)0xE68891進行從character_set_client到character_set_connection的轉(zhuǎn)換,而是直接把0xE68891認為是某個字符串由gbk編碼后得到的字節(jié)序列。

3.再把上述0xE68891從gbk轉(zhuǎn)換為character_set_results,也就是utf8。0xE688在gbk中代表漢字'鎴',而0x91無法解碼(我們可以看到上述查詢結(jié)果中有1個warning)。

結(jié)論

解決亂碼問題,要從客戶端到服務(wù)器通信流程中的字符集編碼、轉(zhuǎn)碼、解碼來分析是哪一步的問題。

一般情況下,保證:

  • character_set_client
  • character_set_results
  • character_set_connection
  • 客戶端的字符集編碼

當其一致時就可解決亂碼問題。


當前題目:MySQL亂碼問題如何排查
URL鏈接:http://www.dlmjj.cn/article/dpgigcg.html