mysql2csv 和 csv2mysql 工具

mysql2csv 和 csv2mysql 工具

在这里提供了两个使用 .csv 格式 的简单的 MySQL 数据库的导数据工具。csv 格式可以很容易地生成和解析,而且,也可以很容易地使用办公软件把 .csv 格式转换为 .xls/.xlsx 格式,或者把 .xls/.xlsx 格式转换为 .csv 格式的文件。

  • mysql2csv - 将 MySQL 的数据导出为 csv 格式的文件。
  • csv2mysql - 将 csv 格式的文件的数据导入到 MySQL 数据库。

编译代码

在编译代码之前,如果你用的是 yum,那么请先确定软件包 mysql-devel 已经安装在你的系统中,才能使用 mysql 的头文件 mysql/mysql.h ,以及和库文件 libmysqlclient.a 或者 libmysqlclient.so

使用下面的两行命令一编译这两个工具:

g++ mysql2csv.cpp -omysql2csv -g -L/usr/lib64/mysql/  -lmysqlclient
g++ csv2mysql.cpp -ocsv2mysql -g -L/usr/lib64/mysql/  -lmysqlclient

演示

首先,创建一个测试用的数据库,建立初始的数据:

[roxma@VM_6_207_centos mysql2csv]$ mysql -uroot --password="" --default-character-set=utf8
...

mysql> create database csv_test default charset=utf8;
Query OK, 1 row affected (0.02 sec)

mysql> use csv_test;
Database changed
mysql> create table test(id int primary key, value1 varchar(1024))engine=innodb;
Query OK, 0 rows affected (0.08 sec)

mysql> show create table test \G
*************************** 1. row ***************************
       Table: test
Create Table: CREATE TABLE `test` (
  `id` int(11) NOT NULL,
  `value1` varchar(1024) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

mysql> insert into test (id,value1) values(1,"hello"),(2, 'comma , double quotes " '),(3,NULL);
Query OK, 3 rows affected (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> select * from test;
+----+--------------------------+
| id | value1                   |
+----+--------------------------+
|  1 | hello                    |
|  2 | comma , double quotes "  |
|  3 | NULL                     |
+----+--------------------------+
3 rows in set (0.00 sec)

导出 MySQL 的数据到 .csv 文件:

[roxma@VM_6_207_centos mysql2csv]$ ./mysql2csv host="127.0.0.1" port="3306"  db="csv_test" user="root" passwd="" charset="utf8" execute="select * from test" > data.csv
host=127.0.0.1
port=3306
db=csv_test
user=root
passwd=
charset=utf8
execute=select * from test

[roxma@VM_6_207_centos mysql2csv]$ cat data.csv
id,value1
1,hello
2,"comma , double quotes "" "
3,NULL

导入 .csv 文件的数据到 MySQL:

[roxma@VM_6_207_centos mysql2csv]$ ./csv2mysql host="127.0.0.1" port="3306" db="csv_test" user="root" passwd="" charset="utf8" execute="insert into test set id=?id+3, value1=?value1" input="data.csv"
host=127.0.0.1
port=3306
db=csv_test
user=root
passwd=
charset=utf8
execute=insert into test set id=?id+3, value1=?value1
input=data.csv
3 rows executed.

[roxma@VM_6_207_centos mysql2csv]$ mysql -uroot --password="" --default-character-set=utf8 --database="csv_test"  -e"select * from test"
+----+--------------------------+
| id | value1                   |
+----+--------------------------+
|  1 | hello                    |
|  2 | comma , double quotes "  |
|  3 | NULL                     |
|  4 | hello                    |
|  5 | comma , double quotes "  |
|  6 | NULL                     |
+----+--------------------------+

支持的工具选项

选项 描述 默认值
通用选项
host MySQL server 的机器名 127.0.0.1
port MySQL 连接的目标端口 3306
user MySQL 用户名 root
passwd MySQL 用户的密码
charset MySQL 连续使用的字符编码 utf8
db 使用的 MySQL 数据库名。相当于 use db 命令。
mysql2csv 选项
execute 需要执行的 MySQL 查询命令
null_cell_value 当对应的值NULL时,使用这个字符串替换到表格中。 NULL
output 生成的 csv 文件的文件名。如果这个选项为空,则文件 的内容会被输出到 stdout。
csv2mysql 选项
execute 需要执行的 MySQL 指令
warning_as_error 如果为个选项为1,那么在执行 MySQL 语句的过程中如果出现任何 warning,都会被视为错误,程序直接终止退出。 1
input 输入的 csv 文件的文件名。如果这个选项为空,则程序从 stdin 中读取数据。

代码下载

https://github.com/roxma/cpp_learn/tree/master/tools/mysql2csv

你可能感兴趣的:(mysql2)