下文主要給大家?guī)鞰ySQL中文數(shù)據(jù)問題怎么處理,希望這些內(nèi)容能夠帶給大家實際用處,這也是我編輯MySQL中文數(shù)據(jù)問題怎么處理這篇文章的主要目的。好了,廢話不多說,大家直接看下文吧。
創(chuàng)新互聯(lián)公司專注于企業(yè)營銷型網(wǎng)站、網(wǎng)站重做改版、祁縣網(wǎng)站定制設(shè)計、自適應(yīng)品牌網(wǎng)站建設(shè)、H5開發(fā)、商城系統(tǒng)網(wǎng)站開發(fā)、集團公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站制作、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計等建站業(yè)務(wù),價格優(yōu)惠性價比高,為祁縣等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。
中文數(shù)據(jù)問題的本質(zhì)就是字符集的問題。
由于計算機僅識別二進制數(shù)據(jù),而且人類則更傾向于識別字符(符號),因此就需要一個二進制與字符的對應(yīng)關(guān)系,也就是字符集。
在咱們通過 MySQL 數(shù)據(jù)庫的客戶端向云服務(wù)器插入中文數(shù)據(jù)的時候,有可能失敗,原因則可能是客戶端和云服務(wù)器的字符集設(shè)置不同導(dǎo)致的,例如:
客戶端的字符集為gbk,則一個中文字符,對應(yīng)兩個字節(jié);
云服務(wù)器的字符集為utf8,則一個中文字符,對應(yīng)三個字節(jié)。
這樣顯然會在編碼轉(zhuǎn)換的過程中出現(xiàn)問題,從而導(dǎo)致插入中文數(shù)據(jù)失敗。
由于所有的數(shù)據(jù)庫云服務(wù)器表現(xiàn)的一些特性都是通過云服務(wù)器端的變量來保持的,因此系統(tǒng)會先讀取自己的變量,看看具體的表現(xiàn)形式。這樣的話,咱們就可以通過以下語句查看云服務(wù)器到底識別哪些字符集:
-- 查看云服務(wù)器識別的全部字符集show character set;
通過以上查詢,咱們會發(fā)現(xiàn):云服務(wù)器是萬能的,其支持所有字符集。
既然云服務(wù)器支持這么多字符集,總會有一種是云服務(wù)器默認的和客戶端打交道的字符集。因此,咱們可以通過以下語句查看云服務(wù)器默認的對外處理的字符集:
-- 查看云服務(wù)器默認的對外處理的字符集show variables like 'character_set%';
標注1:云服務(wù)器默認的客戶端傳來的數(shù)據(jù)字符集為utf8;
標注2:連接層字符集為utf8;
標注3:當前數(shù)據(jù)庫的字符集為utf8;
標注4:云服務(wù)器默認的對外處理的字符集utf8.
通過以上查詢,咱們會發(fā)現(xiàn):云服務(wù)器默認的對外處理的字符集是utf8.
那么反過來,咱們在通過客戶端的屬性查看客戶端支持的字符集:
顯然,咱們已經(jīng)找到了問題的根源,確實是:客戶端支持的字符集為gbk,而云服務(wù)器默認的對外處理的字符集為utf8,因此產(chǎn)生矛盾。
既然問題已經(jīng)找到了,那么解決方案就是:修改云服務(wù)器默認接收的字符集為gbk.
-- 修改云服務(wù)器默認接收的字符集為 GBK(不區(qū)分大小寫)set character_set_client = gbk;
這樣的話,咱們再插入中文數(shù)據(jù)的時候,就會插入成功啦!But,在咱們查看數(shù)據(jù)的時候,又發(fā)現(xiàn)了一個問題,就是之前咱們插入的中文數(shù)據(jù)顯示亂碼啦!不過這也正常,因為查詢的時候,數(shù)據(jù)的來源是云服務(wù)器(utf8),解析數(shù)據(jù)的是客戶端,而客戶端僅識別gbk格式的數(shù)據(jù),顯示亂碼也就在意料之中啦!
因此,解決方案就是:修改云服務(wù)器給客戶端的數(shù)據(jù)字符集為gbk.
-- 修改云服務(wù)器給客戶端的數(shù)據(jù)字符集為 GBK(不區(qū)分大小寫)set character_set_results = gbk;
如上圖所示,向云服務(wù)器插入中文數(shù)據(jù)的問題已經(jīng)解決啦!
此外,咱們之前使用的 SQL 語句:
-- 修改的只是會話級別,即當前客戶端當次連接有效,關(guān)閉后失效set 變量 = 值;
這樣的話,每當咱們重啟客戶端的時候,都要依次重新進行設(shè)置,比較麻煩,因此咱們可以使用快捷的設(shè)置方式,即:
set names 字符集;
例如,
/** * 恒等于 set character_set_client = gbk; * 恒等于 set character_set_results = gbk; * 恒等于 set character_set_connection = gbk; */set names gbk;
表示上述一條語句,將同時改變?nèi)齻€變量的值。其中,connection為連接層,是字符集轉(zhuǎn)換的中間者,如果其和client和results的字符集一致,則效率更高,不一致也沒有關(guān)系。
對于以上關(guān)于MySQL中文數(shù)據(jù)問題怎么處理,大家是不是覺得非常有幫助。如果需要了解更多內(nèi)容,請繼續(xù)關(guān)注我們的行業(yè)資訊,相信你會喜歡上這些內(nèi)容的。
網(wǎng)頁題目:MySQL中文數(shù)據(jù)問題怎么處理
本文來源:http://jinyejixie.com/article44/ghoshe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供建站公司、響應(yīng)式網(wǎng)站、網(wǎng)站建設(shè)、搜索引擎優(yōu)化、網(wǎng)站改版、App設(shè)計
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)