程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> mysql 1366錯誤:字符集沖突導致插入數據異常,解決方案

mysql 1366錯誤:字符集沖突導致插入數據異常,解決方案

編輯:MySQL綜合教程

mysql 1366錯誤:字符集沖突導致插入數據異常,解決方案


一:異常信息:errorCode:1366

Caused by: java.sql.SQLException: Incorrect string value: '\xE7\xAE...' for column 'description' at row 1

二:異常原因:字符集沖突

mysql insert入庫的時候,由於插入數據編碼與數據庫字段字符集不一致,導致數據無法插入。

三:追本溯源

在mysql數據庫中執行show character set,可以看到不同的字符集的最大長度不同。

\

如果執插入utf8編碼數據,數據庫表中字段字符集是latin。(查詢字段字符集方法:show full columns from user;)

\

如果最大長度為3的utf8字符集存儲到最大長度為1的latin數據庫字段中,數據會被截斷,無法正常插入,導致異常。

四:解決辦法

修改數據庫的字符集編碼

MySQL配置文件在Windows下叫my.ini,在MySQL的安裝根目錄下;在Linux下叫my.cnf,該文件位於/etc/my.cnf。

(1)window服務器

mysql數據庫的配置文件my.ini,此文件放在mysql根目錄下。在此文件下查找default-character-set屬性,並將其值更改為utf8:default-character-set = utf8

(2)linux服務器
修改my.cnf
vi /etc/my.cnf
在[client]下添加
default-character-set=utf8
在[mysqld]下添加

default-character-set=utf8

在新的版本5.5以上,如果這樣修改的話,會造成無法啟動的錯誤,
報的是pid文件更新問題。

經過查看mysql日志,如下:

\

是default-character-set參數不可用。

新版本mysql配置方法是
在[mysqld]下把default-character-set=utf8換成character-set-server=utf8就可以了
重啟mysql可以使用 sudo /etc/init.d/mysql restart
注意修改數據庫編碼以後,需要把以前的數據庫刪除掉,重新建立。

五:補充知識
(1)字符(Character)是指人類語言中最小的表義符號。例如'A'、'B'等;
給定一系列字符,對每個字符賦予一個數值,用數值來代表對應的字符,這一數值就是字符的編碼(Encoding)。例如,我們給字符'A'賦予數值0,給字符'B'賦予數值1,則0就是字符'A'的編碼;

給定一系列字符並賦予對應的編碼後,所有這些字符和編碼對組成的集合就是字符集(Character Set)。例如,給定字符列表為{'A','B'}時,{'A'=>0, 'B'=>1}就是一個字符集;

(2)字符序(Collation)是指在同一字符集內字符之間的比較規則;
確定字符序後,才能在一個字符集上定義什麼是等價的字符,以及字符之間的大小關系;
每個字符序唯一對應一種字符集,但一個字符集可以對應多種字符序,其中有一個是默認字符序(Default Collation);

MySQL中的字符序名稱遵從命名慣例:以字符序對應的字符集名稱開頭;以_ci(表示大小寫不敏感)、_cs(表示大小寫敏感)或_bin(表示按編碼值比較)結尾。例如:在字符序``utf8_general_ci''下,字符``a''和``A''是等價的;

(3)MySQL字符集設置
系統變量:
– character_set_server:默認的內部操作字符集
– character_set_client:客戶端來源數據使用的字符集
– character_set_connection:連接層字符集
– character_set_results:查詢結果字符集
– character_set_database:當前選中數據庫的默認字符集
– character_set_system:系統元數據(字段名等)字符集

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