1. 程式人生 > >Mysql 匯入excel檔案 中文亂碼

Mysql 匯入excel檔案 中文亂碼

Mysql配置好之後,需要資料來進行學習,插入太慢,正好有現成的excel檔案可以匯入。
使用的資料庫工具是DBeaver,找了半天也沒找到怎麼匯入excel,比oracle的plsql工具差太遠了。
然後把excel另存為csv檔案,編碼是utf8格式的:

-bash-4.1$ file import.csv 
import.csv: UTF-8 Unicode text

從Mysql命令列匯入:

mysql> load data local infile '/var/lib/mysql/import.csv' into table yaohq.nanchang_union_butie fields terminated by
','; Query OK, 0 rows affected, 603 warnings (0.03 sec) Records: 201 Deleted: 0 Skipped: 201 Warnings: 603

好多警告,查看錶資料發現中文全是亂碼。。。
然後解決亂碼問題:
1. 把表的字符集設定為utf8:

ALTER TABLE yaohq.nanchang_union_butie DEFAULT CHARSET=utf8;

-^……^-
2. 把資料庫的字符集設定為utf8:

[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci

[client]
default
-character-set=utf8

然後重啟資料庫,重新匯入csv檔案,發現還是亂碼。
看了一下亂碼的列屬性,發現編碼還是開始預設的latin1
問題可能就在這裡了,由於列比較多,沒有用modify去修改每個列的字符集,直接刪除表重建,建表的時候在最後加上default charset=utf8就OK了,然後檢視每個列的字符集,也都變成了utf8
繼續匯入csv檔案,沒有報錯:

mysql> load data local infile '/var/lib/mysql/import.csv' into table yaohq.nanchang_union_butie fields terminated by
','; Query OK, 201 rows affected (0.05 sec) Records: 201 Deleted: 0 Skipped: 0 Warnings: 0

查詢資料,中文可以正常顯示了。

如果匯入的檔案是gbk格式的,表的編碼應該也是gbk的。
如果表的編碼不可更改,那就修改匯入檔案的編碼吧。