最近老师让我把小范同学的数据导入到OpenStack平台虚拟机的Mysql中,他给我的数据格式是Excel和CSV。因为Excel文件可以导出成CSV格式的文件,所以归根结底还是如何将CSV文件导入到Mysql中。在导入的过程中遇到了很多问题,而且发现网上的文档都不怎么靠谱,弄了好久最后算是导入成功。其中最头痛的问题就是编码问题,由于我的linux是英文版的,所以中文数据在上面显示乱码,需要安装中文编码库。(前几天弄的时候犯了个低级错误,后面会讲到)具体步骤如下:
一、将Excel转为CSV
如果是Excel文件,需要在Excel中,通过右上角菜单栏:文件->另存为->选择.CSV文件。
这里需要注意,Windows下Excel默认编码是ANSI,而我需要的是utf8]编码的文件,所以需要在另存为csv的时候将编码改成utf8.
如何改呢?
方法一:在另存为的界面上有个“工具”选项,点开后选择“Web选项”,然后选择“编码”选项卡进行设置。
方法二:使用文本编辑神器NotePad++打开csv文件,然后选择 格式—>转为utf8无BOM编码格式
神器下载地址:点我下载神器
不知道什么是BOM?点我告诉你
二、下载中文编码库
如果你的ubunt是英文版,而且显示中文乱码的话,那么就要下载中文编码库。
sudo apt-get update //ubuntu系统更新软件包列表
sudo apt-get install -y language-pack-zh-hans
sudo apt-get install -y language-pack-zh-hant
下载完成后,安装到本机:
cd /usr/share/locales
sudo ./install-language-pack zh_CN //开始安装zh_CN中文字符集
三、更改Mysql编码
我们要把utf8编码格式的文件导入到mysql中,因此需要设置mysql字符集为utf8.
进入mysql,查看mysql当前字符集:
show variables like 'char%';
必须确保以下五项均为utf8.
character_set_client
character_set_connection
character_set_database
character_set_results
character_set_server
如果其中有一项不是,需要修改/etc/mysql/my.cnf文件。
首先停止mysql,然后打开my.cnf文件。
sudo /etc/init.d/mysql stop
sudo vim /etc/mysql/my.cnf
在[mysqld]标签下添加character_set_server=utf8和init_connect=’SET NAMES utf8′
然后保存退出,重启mysql,如果没有变化可以重启机器。
四、建立数据库及表
进入mysql,建立数据库及对应的表。
create database 数据库名;
根据你的csv文件建立表格,表中的字段需要与csv文件中的字段一一对应。例如:
create table sdata (CUSTOMERID varchar(6),SEX varchar(1),NAME varchar(20),SUMFARE double(8,3),IDCARDNO varchar(20));
其中 sdata 为表名,这个表名需要与你的 csv文件名一致 ,否则导入的时候会出错。
五、导入csv文件。
mysql -u用户名 -p密码 数据库名 --local-infile=1 -e "load data local infile '/home/hrd/sdata.csv' into table sdata
fields terminated by ',' lines terminated by '\r\n';"
特变注意,u用户名之间是没有空格的,p与密码之间也没有空格。sdata是表名,与csv文件/home/hrd/sdata.csv名称一致。数据库就是sdata表所在的数据库。
fields terminated by ‘,’表示数据之间用“,”隔开,这是csv文件的特性。lines terminated by ‘\r\n’表示每行数据以回车结束。
至此,文件导入成功。
六、中途的错误
最开始弄的时候,以上步骤均操作了,但是最后从数据库查询的中文依然是乱码,让我很纠结。因为我是使用XShell连接的远程虚拟机,我就想到会不会是XShell显示的问题,果然,将XShell的编码格式改为utf8以后就显示正常了。坑爹啊有木有。
七、遇到的问题
1、ubunt英文版显示中文乱码问题。
2、mysql查看及更改字符集
3、Excel文件转为CSV并设置编码格式
4、XShell编码格式
参考资料:
http://www.cnblogs.com/latifrons/archive/2012/09/07/2675141.html //cvs导入mysql
http://blog.csdn.net/a342374071/article/details/8068524 //
http://soft.chinabyte.com/database/57/12623557.shtml //数据库字符集查看
http://bbs.chinaunix.net/thread-4057535-1-1.html //linux下查看及修改文件的字符集
http://www.cnblogs.com/alamps/archive/2012/11/27/2791312.html //修改mysql字符集
http://8817074.blog.51cto.com/8807074/1678552 //linux下更改中文字符集
http://www.cr173.com/html/50452_1.html // mysql设置编码为utf8