zoukankan      html  css  js  c++  java
  • *.csv文件导入Mysql出现的乱码等问题

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

    概要写法:

    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(50character 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;

     

  • 相关阅读:
    分享:TreeFrog 1.3 发布,基于 C++/QT 的 Web 框架
    Linux环境进程间通信(五): 共享内存(上)
    TUP第二期:架构师王鹏云演讲实录 _业界_科技时代_新浪网
    发布我的倒排索引 C/C++ ChinaUnix.net
    操作系统内存管理——分区、页式、段式管理
    内存管理内幕
    IT农民工如何来美国工作
    来自 王斌 (@iwangbin) 的推文
    ScheduledExecutorService执行周期性或定时任务
    PHP XML parse error: Extra content at the end of the document
  • 原文地址:https://www.cnblogs.com/spirit/p/1583664.html
Copyright © 2011-2022 走看看