Csv文件导入Mysql出现的乱码问题及解决方法
将*.csv文件导入mysql可使用LOAD DATA INFILE, 概要写法: 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 查看表及字段的编码方式,当然也可以通过可视化工具修改字段的编码格式 但我修改以上两项之后我导入数据依旧乱码,我的CSV文件编码格式是GBK, 我导入的命令行具体写法是: LOAD DATA LOCAL INFILE ’D:ports.csv’ INTO TABLE ports FIELDS TERMINATED ‘,' ENCLOSED BY ‘”’ LINES TERMINATED BY ‘’ starting by’’; 在网络上找到一篇关于此问题的文章: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 ‘’ starting by ’’; 至此乱码变成了正确的中文字符。 遇到的问题二:在导入数据后查看数据时发现CSV文件中第一行有效数据丢失,而多出三行怪异的无效数据行,而且在执行导入命令时有39个警告。 我的解决方法: 首先我使用SHOW WARNINGS;命令查看提示的警告内容,发现CSV文件中的列标题导入数据库中出现了N多警告,而出现数据错误的关键原因在 LINES TERMINATED BY ‘’ 这句中,因为第一行列标题并没有以回车换行字符结束,第一行标题列在转换过程出错,也导致了第一行有效数据在导入过程中出现错误。我将csv文件中文件标题的最后一列标题加上一回车后保存数据,CSV中的第一行有效数据终于导入到数据中,但却多一行标题行数据,通过IGNORE命令可解决。 最后的CSV导入命令行的写法: LOAD DATA LOCAL INFILE ’D:ports.csv’ INTO TABLE ports character set gbk2312 FIELDS TERMINATED ‘,' ENCLOSED BY ‘”’ LINES TERMINATED BY ‘’ starting by ’’ IGNORE 1 LINES; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |