一、問題 開發中遇到將其它資料庫數據插入到mysql資料庫表中一直會報類似如下錯誤: 二、分析 1. 我先去查了兩個資料庫表中此欄位對應的類型都是 varchar,所以不存在類型不一致導致插入報錯的問題。 2. 排除欄位類型不一致導致的錯誤後,我猜測是中文亂碼問題,然後插入純英文數據發現沒有報錯,所 ...
一、問題
開發中遇到將其它資料庫數據插入到mysql資料庫表中一直會報類似如下錯誤:
Incorrect string value: '\xE6\x88\x91' for column 'name' at row 1
二、分析
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”,使用資料庫;
- 查看資料庫表的字元集編碼格式:輸入命令 “ show create table test.xtt_test_copy; ”;
- 如上圖所示,發現預設是"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”;
- 查看資料庫的字元集編碼格式:輸入命令 “ show creat database test; ”;
- 如上圖所示,發現預設,是"latin1"並不是“utf8”,需要繼續手動修改,輸入命令 “ ALTER DATABASE test DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;”,繼續輸入命令 “SHOW CREATE database test; ” ,查看預設資料庫表的字元集編碼改為了“utf8”;
3. 最後,重啟服務就可以了 ~
mysql> net stop mysql;
mysql> net start mysql;