1. 程式人生 > 資料庫 >mysql中插入表資料中文亂碼問題的解決方法

mysql中插入表資料中文亂碼問題的解決方法

一、問題

開發中遇到將其它資料庫資料插入到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;

在我們平時使用mysql的過程中,經常會碰到中文亂碼的情況,根據平時的工作經驗我總結歸納了以下四個需要注意的地方:

1. mysql啟動時的字符集,在myini檔案中配置 default-character-set=字符集,放在,[WinMySQLadmin]之上;

2. 資料庫建表的過程中設定字符集,在CREATE語句最後的 CHARSET=字符集 語句中設定;

3. 在驅動url中的選項中設定字符集,jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=字符集;

4. 在web顯示頁中設定顯示的字符集,<%@ page contentType="text/html; charset=字符集" language="java" import="java.sql.*" errorPage="" %>在servelt中則是response.setContentType("text/html;charset=字符集");

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對我們的支援。