*.csv文件导入Mysql出现的乱码等问题

将*.csv文件导入mysql可使用LOAD DATA INFILE,

概要写法:

ExpandedBlockStart.gif Load data in file
LOAD  DATA  [ LOW_PRIORITY | CONCURRENT ]   [ LOCAL ]  INFILE ‘ file_name .csv’
[ REPLACE | IGNORE ]
INTO   TABLE   tbl_name
[ FIELDS
       [TERMINATED BY  ‘string’
]
       
[ [OPTIONALLY ]  ENCLOSED  BY  ‘ char ’]
       
[ ESCAPED BY ‘char’ ]
]
[ LINES
        [STARTING BY ‘string’
]
        
[ TERMINATED BY ‘string’ ]
]
[ IGNORE number LINES ]
[ (col_name_or_user_var,….) ]
[ SET col_name=expr,…) ]

 

具体语法使用可参照:http://dev.mysql.com/doc/refman/5.1/zh/sql-syntax.html#load-data

如果一个表中只有英文字符则导入不出现问题,写法也极其简单:

LOAD  DATA LOCAL INFILE ‘D:\\ports.csv’  INTO   TABLE  ports;

 

遇到的问题一:ports.csv文件中存在中文字符,导入数据后变成乱码

首先修改表及字段的编码方式

alter   table  ports  character   set  gbk2312;
alter   table  ports modify port_chinese  varchar ( 50 character   set  gbk2312;

 

 

通过 show create table ports 查看表及字段的编码方式,当然也可以通过可视化工具修改字段的编码格式

我导入的命令行具体写法是:

LOAD  DATA LOCAL INFILE ’D:\\ports.csv’  INTO   TABLE  ports  FIELDS TERMINATED ‘, '  ENCLOSED BY ‘”’ LINES TERMINATED BY ‘\r\n’ starting by’’;

 

但我修改以上两项之后我导入数据依旧乱码,我的CSV文件编码格式是GBK,


在网络上找到一篇关于此问题的文章:http://www.sqlstudy.com/sql_article.php?id=2008081901,借鉴于文章中的写法修改语句如下:

LOAD  DATA LOCAL INFILE ’D:\\ports.csv’  INTO   TABLE  ports   character   set  gbk2312  FIELDS TERMINATED ‘, '  ENCLOSED BY ‘”’ LINES TERMINATED BY ‘\r\n’ starting by ’’;

 

至此乱码变成了正确的中文字符。

 

遇到的问题二:在导入数据后查看数据时发现CSV文件中第一行有效数据丢失,而多出三行怪异的无效数据行,而且在执行导入命令时有39个警告


首先我使用SHOW WARNINGS;命令查看提示的警告内容,发现CSV文件中的列标题导入数据库中出现了N多警告,而出现数据错误的关键原因在 LINES TERMINATED BY ‘\r\n’ 这句中,因为第一行列标题并没有以回车换行字符结束,第一行标题列在转换过程出错,也导致了第一行有效数据在导入过程中出现错误。我将csv文件中文件标题的最后一列标题加上一回车后保存数据,CSV中的第一行有效数据终于导入到数据中,但却多一行标题行数据,通过IGNORE命令可解决。

最后的CSV导入命令行的写法:

LOAD  DATA LOCAL INFILE ’D:\\ports.csv’  INTO   TABLE  ports    character   set  gbk2312  FIELDS TERMINATED ‘, '  ENCLOSED BY ‘”’ LINES TERMINATED BY ‘\r\n’ starting by ’’ IGNORE 1 LINES;

 

转载于:https://www.cnblogs.com/spirit/archive/2009/10/15/1583664.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值