zoukankan      html  css  js  c++  java
  • MySQL直接导出CSV文件,并解决中文乱码的问题

    需求:

      需要导出hr_users 表中的部分字段的数据,以前是用PHP写脚本,然后导出CSV文件。

      在MySQL中,它自己就能导出CSV文件 ,只不过是有如下几个问题需要大家解决。

      1. 生成文件不成功,没有读写权限

      2.导出数据为中文乱码

      3.数据没有格式化,阅读不方便

    解决方案:

    如果使用 select  ... into  outfile ...方式导出数据,需要分为两种情况 :
    1. windows系统下:可以随意指定对应的目录 。
    2. linux 系统下 :
    (1)不指定目录 ,默认在当前导出数据库数据目录下 ,例如  /var/lib/mysql/db_name 
    (2) 指定目录时,默认只能指定 /tmp目录 。否则回报 “ ERROR 1 (HY000) at line 1: Can't create/write to file '/xxxx/xxxx/xxx.csv' (Errcode: 13)” 错误 !导致原因是因为权限问题,修改起来比较麻烦 !可以放到/tmp/目录下,然后cp到其它你想存放的目录。【

    推荐使用这种方法】

    对于中文乱码的问题,有两种解决方案

    1.user表是utf8编码,excel默认编码格式是GBK,excel直接打开时候是一堆乱码。后来想了一个办法中转,先保存成为txt格式,excel打开txt时候会提示选择用哪种编码方式打开,选择utf8解决。

    2.导出时候加上CHARACTER SET gbk 即可【推荐使用】

    关于数据格式化的问题,需要给导出的字段传递一些参数

    1 fields terminated by ',' optionally enclosed by '"' escaped by '"'   
    2 lines terminated by '
    '   

    这个参数是根据RFC4180文档设置的,该文档全称Common Format and MIME Type for Comma-Separated Values (CSV) Files,其中详细描述了CSV格式,其要点包括:

    (1)字段之间以逗号分隔,数据行之间以 分隔;

    (2)字符串以半角双引号包围,字符串本身的双引号用两个双引号表示。

    terminated by分隔符:意思是以什么字符作为分隔符
    enclosed by字段括起字符
    escaped by转义字符
    terminated by描述字段的分隔符,默认情况下是tab字符( ) 
    enclosed by描述的是字段的括起字符。
    escaped by描述的转义字符。默认的是反斜杠(backslash: )  
     

    一个完整的实例如下所示:

     select id , tel,email from hr_users limit 3 into outfile '/tmp/junjun.csv' character set gbk 
    fields terminated by ',' optionally enclosed by '"'
    lines terminated by ' ';
  • 相关阅读:
    Xcode 增强开发效率的插件
    svn 常用指令
    初识JFinal
    企业竞争案例分析
    可行性研究5
    可行性研究习题4
    可行性研究课后题
    关于阅读软件工程和计算机科学技术区别的文章来谈谈自己看法
    关于中文编程是解决中国程序员效率的秘密武器的问题思考
    Java ForkJoinPool 用法及原理
  • 原文地址:https://www.cnblogs.com/xs-yqz/p/7238242.html
Copyright © 2011-2022 走看看