国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

MySQL存儲數據亂碼的問題解析

2024-07-24 13:07:05
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了MySQL存儲數據亂碼的問題解析,作者從實際使用中的多個方面定位其原因然后解決,需要的朋友可以參考下
 

mysql的字符集設置有多個層級,在mysql中存儲中文,如果不能正確設置字符集,很容易出現數據亂碼。今天就有一個用戶反饋他數據庫中的數據下午1點多開始出現了亂碼。在這里,我分享下具體問題的排查過程,以及解決的辦法。

(1)  排除客戶端設置導致的顯示亂碼

如果用戶設置的mysql character_set_client跟客戶端顯示的字符集不一致,很容易導致中文數據亂碼。

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

MySQL存儲數據亂碼的問題解析

上面顯示,在character_set_client跟客戶端的字符集一致的情況下,還是出現了亂碼,這個排除是用戶顯示字符集設置不對的可能。下面通過hex(item_title)列來查看這個列在底層的存儲字符集是否正確。

MySQL存儲數據亂碼的問題解析

通過上面的查詢,可以確認這個數據亂碼不是顯示問題,而是存儲的數據內容本身就是錯誤的。

(2)  定位存儲亂碼原因

1>     用戶確認這個記錄插入時能夠正常顯示,但是后來update之后,數據就亂碼了。根據這個信息到binlog中查找更改正確內容對應的update語句。

MySQL存儲數據亂碼的問題解析

MySQL存儲數據亂碼的問題解析

上面的binlog日志顯示這個sql將原來數據庫中正確的內容,更新成一堆亂碼。所以導致數據庫中的存儲數據亂碼。

從binlog日志可以看出在更新時,是用latin1的方式寫入到數據庫中。Update后面的set語句中item_title字段的內容是亂碼的,所以確認是導入數據源本身內容有問題,從而導致更新后的數據亂碼。跟用戶確認這個update語句的更新內容,是先從庫中load 出來,后拼接成的update sql,所以懷疑load出來的數據就已經是亂碼了,然后直接用這個錯誤的數據更新原來正確的數據,導致所有的正確的數據亂碼。所以,需要確認這個update導入的數據源是否正確,即load出來的數據是否是正確的。

2>     導入數據源確認

開啟實例的全日志開關,然后比對日志,從上面update語句對應的連接運行的sql中查找數據導出語句,以及對應的字符集設置。

MySQL存儲數據亂碼的問題解析

從上面的日志內容可以看出,這個連接建立后沒有進行任何字符集的設置,直接從數據庫中將內容select出來。在mysql中,如果沒有設置session級別的字符集,那么使用默認的配置,配置如下:

MySQL存儲數據亂碼的問題解析

即輸出會按照latin1的格式顯示。在默認字符集的配置下,手動運行SELECT `main_table`.* FROM `promo_item` AS `main_table` WHERE  promo_item_id ='500186324' 命令,可以發現,在character_set_results 設置為latin1的情況下,輸出結果中的item_title確實為一堆問號。

MySQL存儲數據亂碼的問題解析

由于latin1不能正確表示中文字符,所以顯示為一堆問號,用戶直接將這個內容update 原來正確的內容,所以導致存儲內容亂碼。

(3)小結

在使用mysql存儲中文字符時,需要注意以下幾點:

1>     確認更新的數據源同mysql 的session級別的字符集保持一致,Session級別的字符集可以用set names charset_name來設置。

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


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 湖口县| 丰都县| 浦江县| 绥滨县| 镇赉县| 临湘市| 阆中市| 丰县| 定边县| 平湖市| 横山县| 吐鲁番市| 雅安市| 尖扎县| 吴桥县| 永吉县| 马山县| 潍坊市| 金山区| 闻喜县| 手游| 平度市| 扎赉特旗| 荣昌县| 五大连池市| 芒康县| 太湖县| 钟祥市| 大方县| 陆川县| 古丈县| 思茅市| 周至县| 巴塘县| 鲜城| 沁水县| 巨野县| 马公市| 大连市| 密山市| 永春县|