欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MySQL存儲(chǔ)數(shù)據(jù)亂碼的問(wèn)題解析

 更新時(shí)間:2015年05月07日 10:57:39   投稿:goldensun  
這篇文章主要介紹了MySQL存儲(chǔ)數(shù)據(jù)亂碼的問(wèn)題解析,作者從實(shí)際使用中的多個(gè)方面定位其原因然后解決,需要的朋友可以參考下

mysql的字符集設(shè)置有多個(gè)層級(jí),在mysql中存儲(chǔ)中文,如果不能正確設(shè)置字符集,很容易出現(xiàn)數(shù)據(jù)亂碼。今天就有一個(gè)用戶(hù)反饋他數(shù)據(jù)庫(kù)中的數(shù)據(jù)下午1點(diǎn)多開(kāi)始出現(xiàn)了亂碼。在這里,我分享下具體問(wèn)題的排查過(guò)程,以及解決的辦法。

(1)  排除客戶(hù)端設(shè)置導(dǎo)致的顯示亂碼

如果用戶(hù)設(shè)置的mysql character_set_client跟客戶(hù)端顯示的字符集不一致,很容易導(dǎo)致中文數(shù)據(jù)亂碼。

設(shè)置session字符集為utf8:set names utf8,設(shè)置客戶(hù)端顯示字符集為utf8,然后從表中select出有亂碼的數(shù)據(jù)。

201557105216605.jpg (821×583)

上面顯示,在character_set_client跟客戶(hù)端的字符集一致的情況下,還是出現(xiàn)了亂碼,這個(gè)排除是用戶(hù)顯示字符集設(shè)置不對(duì)的可能。下面通過(guò)hex(item_title)列來(lái)查看這個(gè)列在底層的存儲(chǔ)字符集是否正確。

201557105249811.jpg (811×149)

通過(guò)上面的查詢(xún),可以確認(rèn)這個(gè)數(shù)據(jù)亂碼不是顯示問(wèn)題,而是存儲(chǔ)的數(shù)據(jù)內(nèi)容本身就是錯(cuò)誤的。

(2)  定位存儲(chǔ)亂碼原因

1>     用戶(hù)確認(rèn)這個(gè)記錄插入時(shí)能夠正常顯示,但是后來(lái)update之后,數(shù)據(jù)就亂碼了。根據(jù)這個(gè)信息到binlog中查找更改正確內(nèi)容對(duì)應(yīng)的update語(yǔ)句。

201557105315821.jpg (792×244)

201557105339521.jpg (737×771)

上面的binlog日志顯示這個(gè)sql將原來(lái)數(shù)據(jù)庫(kù)中正確的內(nèi)容,更新成一堆亂碼。所以導(dǎo)致數(shù)據(jù)庫(kù)中的存儲(chǔ)數(shù)據(jù)亂碼。

從binlog日志可以看出在更新時(shí),是用latin1的方式寫(xiě)入到數(shù)據(jù)庫(kù)中。Update后面的set語(yǔ)句中item_title字段的內(nèi)容是亂碼的,所以確認(rèn)是導(dǎo)入數(shù)據(jù)源本身內(nèi)容有問(wèn)題,從而導(dǎo)致更新后的數(shù)據(jù)亂碼。跟用戶(hù)確認(rèn)這個(gè)update語(yǔ)句的更新內(nèi)容,是先從庫(kù)中l(wèi)oad 出來(lái),后拼接成的update sql,所以懷疑load出來(lái)的數(shù)據(jù)就已經(jīng)是亂碼了,然后直接用這個(gè)錯(cuò)誤的數(shù)據(jù)更新原來(lái)正確的數(shù)據(jù),導(dǎo)致所有的正確的數(shù)據(jù)亂碼。所以,需要確認(rèn)這個(gè)update導(dǎo)入的數(shù)據(jù)源是否正確,即load出來(lái)的數(shù)據(jù)是否是正確的。

2>     導(dǎo)入數(shù)據(jù)源確認(rèn)

開(kāi)啟實(shí)例的全日志開(kāi)關(guān),然后比對(duì)日志,從上面update語(yǔ)句對(duì)應(yīng)的連接運(yùn)行的sql中查找數(shù)據(jù)導(dǎo)出語(yǔ)句,以及對(duì)應(yīng)的字符集設(shè)置。

201557105423659.jpg (810×324)

從上面的日志內(nèi)容可以看出,這個(gè)連接建立后沒(méi)有進(jìn)行任何字符集的設(shè)置,直接從數(shù)據(jù)庫(kù)中將內(nèi)容select出來(lái)。在mysql中,如果沒(méi)有設(shè)置session級(jí)別的字符集,那么使用默認(rèn)的配置,配置如下:

201557105448774.jpg (816×323)

即輸出會(huì)按照l(shuí)atin1的格式顯示。在默認(rèn)字符集的配置下,手動(dòng)運(yùn)行SELECT `main_table`.* FROM `promo_item` AS `main_table` WHERE  promo_item_id ='500186324' 命令,可以發(fā)現(xiàn),在character_set_results 設(shè)置為latin1的情況下,輸出結(jié)果中的item_title確實(shí)為一堆問(wèn)號(hào)。

201557105513089.jpg (794×572)

由于latin1不能正確表示中文字符,所以顯示為一堆問(wèn)號(hào),用戶(hù)直接將這個(gè)內(nèi)容update 原來(lái)正確的內(nèi)容,所以導(dǎo)致存儲(chǔ)內(nèi)容亂碼。

(3)小結(jié)

在使用mysql存儲(chǔ)中文字符時(shí),需要注意以下幾點(diǎn):

1>     確認(rèn)更新的數(shù)據(jù)源同mysql 的session級(jí)別的字符集保持一致,Session級(jí)別的字符集可以用set names charset_name來(lái)設(shè)置。

2>     如果要正確顯示中文,需要將character_set_results設(shè)置為GBK或是utf8。同時(shí),客戶(hù)端的顯示字符集需要跟character_set_results的配置一致。

相關(guān)文章

  • 詳解SQL四種語(yǔ)言:DDL DML DCL TCL

    詳解SQL四種語(yǔ)言:DDL DML DCL TCL

    本文詳細(xì)介紹了sql的四種語(yǔ)言,包括數(shù)據(jù)定義語(yǔ)言(DDL)、數(shù)據(jù)操作語(yǔ)言(DML)、數(shù)據(jù)控制語(yǔ)言(DCL)和事物控制語(yǔ)言(TCL)。在這幾種語(yǔ)言中有疑惑的可以來(lái)看看這篇文章。
    2016-07-07
  • MySql通過(guò)ip地址進(jìn)行訪問(wèn)的方法

    MySql通過(guò)ip地址進(jìn)行訪問(wèn)的方法

    這篇文章主要介紹了MySql通過(guò)ip地址進(jìn)行訪問(wèn)的方法,首先要登錄mysql,切換數(shù)據(jù)庫(kù)然后授權(quán),具體代碼詳情大家參考下本文
    2018-06-06
  • mysql批量執(zhí)行sql文件的方法

    mysql批量執(zhí)行sql文件的方法

    下面小編就為大家?guī)?lái)一篇mysql批量執(zhí)行sql文件的方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編 過(guò)來(lái)看看吧
    2016-10-10
  • 最新MySQL高級(jí)SQL語(yǔ)句大全

    最新MySQL高級(jí)SQL語(yǔ)句大全

    這篇文章主要介紹了MySQL高級(jí)SQL語(yǔ)句,主要包括常用查詢(xún)知識(shí)order by按關(guān)鍵字排序的sql語(yǔ)句,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-06-06
  • MySQL Router的安裝部署

    MySQL Router的安裝部署

    這篇文章主要介紹了MySQL Router的安裝部署,幫助大家更好的理解和學(xué)習(xí)使用MySQL,感興趣的朋友可以了解下
    2021-04-04
  • MySQL的driverClassName與url使用方式

    MySQL的driverClassName與url使用方式

    這篇文章主要介紹了MySQL的driverClassName與url使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • MySQL8.0.21安裝步驟及出現(xiàn)問(wèn)題解決方案

    MySQL8.0.21安裝步驟及出現(xiàn)問(wèn)題解決方案

    這篇文章主要介紹了MySQL8.0.21安裝步驟及出現(xiàn)問(wèn)題解決方案,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-12-12
  • Mysql中常用的幾種join連接方式總結(jié)

    Mysql中常用的幾種join連接方式總結(jié)

    join語(yǔ)句是面試中經(jīng)常會(huì)讓你現(xiàn)場(chǎng)寫(xiě)出來(lái)的語(yǔ)句,下面這篇文章主要給大家介紹了關(guān)于Mysql中常用的幾種join連接方式,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-05-05
  • deepin20.1系統(tǒng)安裝MySQL8.0.23(超詳細(xì)的MySQL8安裝教程)

    deepin20.1系統(tǒng)安裝MySQL8.0.23(超詳細(xì)的MySQL8安裝教程)

    這篇文章主要介紹了deepin20.1系統(tǒng)安裝MySQL8.0.23(最美國(guó)產(chǎn)Liunx系統(tǒng),最詳細(xì)的MySQL8安裝教程),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-01-01
  • Mysql合并結(jié)果接橫向拼接字段的實(shí)現(xiàn)步驟

    Mysql合并結(jié)果接橫向拼接字段的實(shí)現(xiàn)步驟

    這篇文章主要給大家介紹了關(guān)于Mysql合并結(jié)果接橫向拼接字段的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01

最新評(píng)論