MySQL中文數(shù)據(jù)問題怎么處理

下文主要給大家?guī)鞰ySQL中文數(shù)據(jù)問題怎么處理,希望這些內(nèi)容能夠帶給大家實(shí)際用處,這也是我編輯MySQL中文數(shù)據(jù)問題怎么處理這篇文章的主要目的。好了,廢話不多說,大家直接看下文吧。

創(chuàng)新互聯(lián)公司專注于企業(yè)營(yíng)銷型網(wǎng)站、網(wǎng)站重做改版、祁縣網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、H5開發(fā)商城系統(tǒng)網(wǎng)站開發(fā)、集團(tuán)公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站制作、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁(yè)設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為祁縣等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。

中文數(shù)據(jù)問題

中文數(shù)據(jù)問題的本質(zhì)就是字符集的問題。

由于計(jì)算機(jī)僅識(shí)別二進(jìn)制數(shù)據(jù),而且人類則更傾向于識(shí)別字符(符號(hào)),因此就需要一個(gè)二進(jìn)制與字符的對(duì)應(yīng)關(guān)系,也就是字符集。

在咱們通過 MySQL 數(shù)據(jù)庫(kù)的客戶端向云服務(wù)器插入中文數(shù)據(jù)的時(shí)候,有可能失敗,原因則可能是客戶端和云服務(wù)器的字符集設(shè)置不同導(dǎo)致的,例如:

  • 客戶端的字符集為gbk,則一個(gè)中文字符,對(duì)應(yīng)兩個(gè)字節(jié);

  • 云服務(wù)器的字符集為utf8,則一個(gè)中文字符,對(duì)應(yīng)三個(gè)字節(jié)。

這樣顯然會(huì)在編碼轉(zhuǎn)換的過程中出現(xiàn)問題,從而導(dǎo)致插入中文數(shù)據(jù)失敗。

由于所有的數(shù)據(jù)庫(kù)云服務(wù)器表現(xiàn)的一些特性都是通過云服務(wù)器端的變量來保持的,因此系統(tǒng)會(huì)先讀取自己的變量,看看具體的表現(xiàn)形式。這樣的話,咱們就可以通過以下語(yǔ)句查看云服務(wù)器到底識(shí)別哪些字符集:

-- 查看云服務(wù)器識(shí)別的全部字符集show character set;

MySQL中文數(shù)據(jù)問題怎么處理

通過以上查詢,咱們會(huì)發(fā)現(xiàn):云服務(wù)器是萬能的,其支持所有字符集。

既然云服務(wù)器支持這么多字符集,總會(huì)有一種是云服務(wù)器默認(rèn)的和客戶端打交道的字符集。因此,咱們可以通過以下語(yǔ)句查看云服務(wù)器默認(rèn)的對(duì)外處理的字符集:

-- 查看云服務(wù)器默認(rèn)的對(duì)外處理的字符集show variables like 'character_set%';

MySQL中文數(shù)據(jù)問題怎么處理

  • 標(biāo)注1:云服務(wù)器默認(rèn)的客戶端傳來的數(shù)據(jù)字符集為utf8;

  • 標(biāo)注2:連接層字符集為utf8;

  • 標(biāo)注3:當(dāng)前數(shù)據(jù)庫(kù)的字符集為utf8;

  • 標(biāo)注4:云服務(wù)器默認(rèn)的對(duì)外處理的字符集utf8.

通過以上查詢,咱們會(huì)發(fā)現(xiàn):云服務(wù)器默認(rèn)的對(duì)外處理的字符集是utf8.

那么反過來,咱們?cè)谕ㄟ^客戶端的屬性查看客戶端支持的字符集:

MySQL中文數(shù)據(jù)問題怎么處理

顯然,咱們已經(jīng)找到了問題的根源,確實(shí)是:客戶端支持的字符集為gbk,而云服務(wù)器默認(rèn)的對(duì)外處理的字符集為utf8,因此產(chǎn)生矛盾。

既然問題已經(jīng)找到了,那么解決方案就是:修改云服務(wù)器默認(rèn)接收的字符集為gbk.

-- 修改云服務(wù)器默認(rèn)接收的字符集為 GBK(不區(qū)分大小寫)set character_set_client = gbk;

這樣的話,咱們?cè)俨迦胫形臄?shù)據(jù)的時(shí)候,就會(huì)插入成功啦!But,在咱們查看數(shù)據(jù)的時(shí)候,又發(fā)現(xiàn)了一個(gè)問題,就是之前咱們插入的中文數(shù)據(jù)顯示亂碼啦!不過這也正常,因?yàn)椴樵兊臅r(shí)候,數(shù)據(jù)的來源是云服務(wù)器(utf8),解析數(shù)據(jù)的是客戶端,而客戶端僅識(shí)別gbk格式的數(shù)據(jù),顯示亂碼也就在意料之中啦!

因此,解決方案就是:修改云服務(wù)器給客戶端的數(shù)據(jù)字符集為gbk.

-- 修改云服務(wù)器給客戶端的數(shù)據(jù)字符集為 GBK(不區(qū)分大小寫)set character_set_results = gbk;

MySQL中文數(shù)據(jù)問題怎么處理

如上圖所示,向云服務(wù)器插入中文數(shù)據(jù)的問題已經(jīng)解決啦!

此外,咱們之前使用的 SQL 語(yǔ)句:

-- 修改的只是會(huì)話級(jí)別,即當(dāng)前客戶端當(dāng)次連接有效,關(guān)閉后失效set 變量 = 值;

這樣的話,每當(dāng)咱們重啟客戶端的時(shí)候,都要依次重新進(jìn)行設(shè)置,比較麻煩,因此咱們可以使用快捷的設(shè)置方式,即:

set names 字符集;

例如,

/**
* 恒等于 set character_set_client = gbk;
* 恒等于 set character_set_results = gbk;
* 恒等于 set character_set_connection = gbk;
*/set names gbk;

表示上述一條語(yǔ)句,將同時(shí)改變?nèi)齻€(gè)變量的值。其中,connection為連接層,是字符集轉(zhuǎn)換的中間者,如果其和client和results的字符集一致,則效率更高,不一致也沒有關(guān)系。

對(duì)于以上關(guān)于MySQL中文數(shù)據(jù)問題怎么處理,大家是不是覺得非常有幫助。如果需要了解更多內(nèi)容,請(qǐng)繼續(xù)關(guān)注我們的行業(yè)資訊,相信你會(huì)喜歡上這些內(nèi)容的。

網(wǎng)頁(yè)題目:MySQL中文數(shù)據(jù)問題怎么處理
本文來源:http://www.muchs.cn/article44/ghoshe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供建站公司、響應(yīng)式網(wǎng)站網(wǎng)站建設(shè)、搜索引擎優(yōu)化、網(wǎng)站改版、App設(shè)計(jì)

廣告

聲明:本網(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)站托管運(yùn)營(yíng)