程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> MySQL中文insert報錯Incorrectstringvalue:'\xCC\xEC\xB2\xC5'

MySQL中文insert報錯Incorrectstringvalue:'\xCC\xEC\xB2\xC5'

編輯:MySQL綜合教程

MySQL中文insert報錯Incorrectstringvalue:'\xCC\xEC\xB2\xC5'


序言:中文錄入失敗,報錯:Incorrect string value: '\xCC\xEC\xB2\xC5',如下所示:

1,去查看數據庫的字符集,是utf8,顯示正常的。
mysql> show variables like '%char%';
2,去查看連接客戶端的字符集,
vim /etc/my.cnf
3,通過sqlyog遠程工具操作,在Query窗口執行如下命令:
SET NAMES utf8;
在sqlyog窗口查詢t表,也正常顯示中文字符,如下圖所示:
\那麼以此推斷,問題在哪裡呢,客戶端sqlyog能正常錄入中文顯示中文,而linux的mysql窗口不行,得去檢查os層的linux操作系統的字符集設置。

4,檢查mysql服務器所在的linux os的字符集
[root@data01 ~]# cat /etc/sysconfig/i18n
然後重啟linux,重啟mysql,或者export LANG="zh_CN.UTF-8";
[root@data01 ~]# service mysqld5612 restart
5,測試,為了數據統一,linux重新設置字符集,然後重新登錄執行中文錄入操作,所以表drop後create,還是報錯,錄入不了中文進去,編碼問題
mysql> INSERT INTO t SELECT 4 AS a ,'第四夢' AS b;
6,檢查xshell工具連接,在Terminal->Encoding:後面的下拉框裡面,發現是默認的,沒有設置成utf8編碼,如下圖所示:
\然後修改成utf8,如下所示:
\然後再去執行,就可以錄入中文了,如下所示:
mysql> INSERT INTO t SELECT 4 AS a ,'第四夢' AS b;
7,番外篇set names utf8;無效的原因

PS:總結,因為mysql有服務端編碼和客戶端編碼概念之分,我的服務器端已經是utf8編碼,而我的MYSQL客戶端(不是mysql窗口界面而是遠程連接mysql服務器的客戶端工具xshell),明顯是GBK或ansi環境,所以必須設置成utf8才能轉換成功。

所以對於中文亂碼,需要去check的地方有如下3個:
1、mysql窗口的字符編碼(xshell連接的遠程工具的字符集設置);
2、數據庫的字符編碼(show variables like '%char%'); 3、linux操作系統的字符編碼(echo $LANG);  

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved