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的。
如果表的编码不可更改,那就修改导入文件的编码吧。