mysql匯入資料亂碼錯誤一則

e71hao發表於2016-08-09
一、錯誤問題描述:用load data infile 匯入1行資料,中文為亂碼。在load data infile 中指定了字符集。
匯入語句為:load data infile  '/home/mysql/order_data.txt' replace into table  test.order_data character set utf8 fields terminated by '|' enclosed by '''' lines terminated by '\n';


二、問題分析:1.當前資料庫字元為latin.
mysql> show variables like 'char%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | latin1                     |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | latin1                     |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

更改資料庫字符集後再次匯入,還是亂碼。什麼原因呢?我已經在load data file 指定了字符集,要匯入的檔案也是utf8,
會話連線,資料庫字元也是utf8.到底什麼原因呢?

又發現要匯入的表order_data是latin1 字符集。我把表order_data字符集改為utf8,匯入還是亂碼。後來發現表的欄位也是
latin1。執行如下語句轉換:ALTER TABLE order_data CONVERT TO CHARACTER SET utf8; 
最終問題解決。匯入不再亂碼。
三、問題總結:mysql的儲存字元結構,除了要看連線時候的字符集,連線資料庫,執行操作所使用的字符集,包括:會話,客戶端,操作結果,還要看儲存資料時使用的字符集:server(全域性) database庫、table表、column列。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30393770/viewspace-2123231/,如需轉載,請註明出處,否則將追究法律責任。

相關文章