mysql 1366錯誤:字元集衝突導致插入資料異常,解決方案,mysql1366

來源:互聯網
上載者:User

mysql 1366錯誤:字元集衝突導致插入資料異常,解決方案,mysql1366

一:異常資訊: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:系統中繼資料(欄位名等)字元集 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.