天天看點

MySQL插入表資料中文亂碼問題解決方案

一、問題

開發中遇到将其它資料庫資料插入到MySQL資料庫表中一直會報類似如下錯誤:

Incorrect string value: '\xE6\x88\x91' for column 'name' at row 1

MySQL插入表資料中文亂碼問題解決方案

二、分析

1. 我先去查了兩個資料庫表中此字段對應的類型都是 varchar,是以不存在類型不一緻導緻插入報錯的問題。

2. 排除字段類型不一緻導緻的錯誤後,我猜測是中文亂碼問題,然後插入純英文資料發現沒有報錯,是以确定了是中文亂碼問題。然後網上百度發現是mysql預設的編碼問題導緻的中文亂碼。

三、解決方案

1. 檢查本地mysql安裝檔案目錄下的my.ini配置檔案,伺服器和用戶端的預設編碼方式是否是utf8

[mysqld]

# 服務端使用的字元集預設為UTF8

character-set-server=utf8

[client]

# 設定mysql用戶端連接配接服務端時預設使用的端口

default-character-set=utf8

2. 上一步無誤後,打開指令行,輸入:net start mysql ,啟動mysql服務;

  • 顯示“服務已經成功啟動”之後,輸入指令“mysql”,使用資料庫;
MySQL插入表資料中文亂碼問題解決方案
  • 檢視資料庫表的字元集編碼格式:輸入指令 “ show create table test.xtt_test_copy; ”;
MySQL插入表資料中文亂碼問題解決方案
  • 如上圖所示,發現預設是"latin1"并不是“utf8”,需要繼續手動修改,輸入指令 “ ALTER TABLE test.xtt_test_copy CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;”,繼續輸入指令 “ show create table test.xtt_test_copy; ”檢視預設資料庫表的字元集編碼改為了“utf8”;
MySQL插入表資料中文亂碼問題解決方案
  • 檢視資料庫的字元集編碼格式:輸入指令 “ show creat database test; ”;
MySQL插入表資料中文亂碼問題解決方案
  • 如上圖所示,發現預設,是"latin1"并不是“utf8”,需要繼續手動修改,輸入指令 “ ALTER DATABASE test DEFAULT  CHARACTER SET utf8 COLLATE utf8_general_ci;”,繼續輸入指令 “SHOW CREATE database test; ” ,檢視預設資料庫表的字元集編碼改為了“utf8”;
MySQL插入表資料中文亂碼問題解決方案

3. 最後,重新開機服務就可以了 ~

mysql> net stop mysql;

mysql> net start mysql;