暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

【数据库】导出数据用csv建议分隔符不要用","(逗号)

原创 %Lucky 2023-04-03
1172

导出数据用csv格式,导出的过程中使用逗号,会存在的问题:如果你的varchar类型字段中的数据包含逗号,则导出数据再次写入时,就会导致出现数据质量问题,如:字段不匹配导致导出失败、或者数据丢失等,详见如下示例:

一、建立原始表,导出数据

(1)新建表a

create table  a (a int,b varchar,c varchar,primary key (a));

(2)向a表中插入数据

insert into a values(1,"a","b1,b");
insert into a values(2,"a","c1,c");

(3)查看插入的数据内容

mysql> select * from a1;
+------+------+------+
| a    | b    | c    |
+------+------+------+
|    1 | a    | b1,b |
|    2 | a    | c1,c |
+------+------+------+

(4)导出a的表数据
注意修改命令中的参数数据库连接参数为自己的信息

###"s/\t/,/g"中的|就是导出数据的分隔符
mysql -h192.168.30.72 -uroot -pAa123456 -P3001 ycsb -e "select * from a" -s |sed -e  "s/\t/,/g" -e "s/NULL/  /g" -e "s/\n/\r\n/g"  > /syw_test/data/a1.csv

(5)查看导出的数据

root@test-rc:/syw_test/data# cat a.csv
1,a,b1,b
2,a,c1,c

二、复制a表,重命令为a1,导入数据

(1)创建a1表

create table a1 (a int,b varchar,c varchar,primary key (a));

(2)导入数据
注:我们用的datax导入数据来验证格式问题,首先下载与安装datax,并配置好对应的内容执行导入,这里我们直接看结果。

#实际的导入结果显示如下,c列出现了丢数据的情况:
mysql> select * from a1;
+------+------+------+
| a    | b    | c    |
+------+------+------+
|    1 | a    | b1   |
|    2 | a    | c1   |
+------+------+------+

#预期的导入结果应显示:
+------+------+------+
| a    | b    | c    |
+------+------+------+
|    1 | a    | b1,b |
|    2 | a    | c1,c |
+------+------+------+

【重要结论】这里演示了一个简单的示例,如果你再次增加一个d字段,类型为int,此时你导入数据,就会出现类型不匹配而导入失败的问题发生。因此导出数据时建议不要用",“逗号分隔,可以用”|"来分割等

#"s/\t/|/g"中的|就是导出数据的分隔符
mysql -h192.168.30.72 -uroot -pAa123456 -P3001 ycsb -e "select * from a" -s |sed -e  "s/\t/|/g" -e "s/NULL/  /g" -e "s/\n/\r\n/g"  > /syw_test/data/a1.csv
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论