FAQ系列 | utf8表存儲latin1亂碼字符轉換

線上有個數據表,字符集是utf8,但由於環境不統一的原因,導致實際上數據表存儲的內容是latin1內碼的數據。
也就是說,藉着utf8的殼子,實際存儲着latin1字符集的數據。
在這種情況下,需要注意幾個字符集配置:

  • 客戶端終端工具(SecureCRT)的顯示字符集設置爲:utf-8,

  • Linux終端(TERM)下,設置LANG環境變量爲:en_US.UTF-8,或者zh_CN.UTF-8,

  • 連接到MySQL後,設置client/connect字符集爲:latin1 (set names latin1)。

完成上述設置後,在Linux命令行的mysql cli客戶端中才能正常顯示中文。
爲了統一,需要將這些數據的內碼也轉成utf8才行,可以按以下幾個步驟完成:

  • 用latin1字符集將原始數據導出,確保在本地客戶端(中文環境)下用文本編輯器可以正常查看,

  • 用文本編輯器另存爲utf-8字符集後上傳到server端 或者 把數據直接拷貝到

  • Linux終端下,新建一個文件,直接將數據粘貼進去,

  • 清空數據表(truncate),修改字符集(alter table xx default charset = utf8),

  • 將文本導入到數據表中。

上面是比較笨的手工操作方法,以演示整個過程。
如果表裏存儲比較複雜的數據時,建議寫程序進行轉換,畢竟內碼不同,無法直接在線轉換。


--------------------------------------分割線--------------------------------------

知數堂 (http://zhishuedu.com)培訓是由資深MySQL專家葉金榮、吳炳錫聯合推出的專業優質培訓品牌,主要有MySQL DBA實戰優化和Python運維開發課程,是業內最有良心、最有品質的培訓課程。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章