csv 导入服务器mysql

本文详细介绍如何从CSV文件导入数据到MySQL数据库的过程,包括创建表、数据清洗、解决乱码及权限问题等步骤。

这段时间比较忙,好久没有发文章了。因为手贱点了ubuntu提供的更新,然后我的wifi模块炸掉了。 重装系统都没解决。。。跑题了。数据是网上的,有很多的类型可以选择,而我对csv这种类型很有好感,就没有用excel的格式。先画个重点:

1. 数据库中要建立对应的表

举例:

  CREATE TABLE test(
  id INT NOT NULL AUTO_INCREMENT,
  title VARCHAR(10) NOT NULL,
  picture_url VARCHAR(50),
  number VARCHAR(25),
  number1 VARCHAR(5),
  inumber2 VARCHAR(5),
  PRIMARY KEY ( id )
  );

2. 清洗对应的数据。

我这里用了excel工具,用了vim对我的数据进行了清洗。

3.连接数据库

mysql -u root -p --local-infile=1# –后面这部分得加上,因为数据库默认是关闭local模式的。为啥要用local模式?见错误3.

4.导入

错误的sql语句
load data infile '/home/guo/needimport.csv' --CSV文件存放路径  
into table student character set gb2312 --要将数据导入的表名  
fields terminated by ',' optionally enclosed by '"' escaped by '"'  
lines terminated by '\n';  

注释:

上面的是sql语句。csv 导入mysql 要求mysql的版本在5.1以上,如果版本不够,是不行的。但是上面的sql语句存在很多问题。解释一下:
上面的set gb2312是当你需要导入的数据中包含中文的时候,需要加上。如果没有中文就不需要。
fields terminated by “,” 是用,分割。
optionally enclosed by ’ ” ’ escaped by ’ ” ’ 就是用引号把你的每个字段给包起来。
而lines terminated by ‘\n’; 这个是用换行符换行。
在vim中,我们可以用set list查看,如果你的换行符还有\r,那你要加入进去。
现在 TAB 键显示为 ^I,而 $显示在每行的结尾
即:lines terminated by ‘\r\n’;

错误1:MySQL会提示你放到指定的目录下。

需要把你的文件放到 /var/lib/mysql-files/下面。这个是在执行sql语句之前,你就要做的。

错误2:如果你不想出现乱码问题,你需要解决编码问题。

vim 打开文件看一下文件的编码
:set fileencoding #查看当前编码
:set fileencodings=cp936 # 然后 w (存盘)一下即可转化为 ANSI 格式。

而linux 还有一种转码方式:iconv 

iconv -f utf-8 -t gbk needchange.csv > output.csv

同理:
iconv -f utf-8 -t cp936 needchange.csv > output.csv
上面这个就是把utf-8转换成cp936.
而导入数据之前一定要转换成ANSI格式,否则会出现乱码。

错误3:

load data infile 其实是没法读取的,要解决需要加一个local. 也就是load data local infile。 而当你这样做的时候,你的mysql 可能会提示你,对不起,不支持。怎么办?
那就把local模式开启!
连接数据库的时候,直接加个参数即可
mysql -u root -p --local-infile=1
如果想变成经常使用的,就去修改配置文件吧

finally:

如果上面的都弄完了。下面是正确的操作方法:

load data local infile '/var/lib/mysql-files/needimport1.csv'  
into table test character set gb2312   
fields terminated by ',' optionally enclosed by '"' escaped by '"'  
lines terminated by '\n';
goodluck!

参考:
http://blog.youkuaiyun.com/quiet_girl/article/details/71436108
http://blog.youkuaiyun.com/china_skag/article/details/8064328
https://stackoverflow.com/questions/7638090/load-data-local-infile-forbidden-in-php/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值