mysql - 如何将包含反斜杠的csv文件导入MySQL

标签 mysql csv escaping backslash

我正在尝试将一个包含 27797 行的大型 csv 文件导入 MySQL。这是我的代码:

将数据本地内文件“foo.csv”加载到以“,”结尾的表格栏字段中,以“””括起,以“\n”结尾的行忽略1行;

效果很好。但是,该文件的某些行包含反斜杠 (\),例如:

"40395383771234304","40393156566585344","84996340","","","2011-02-23 12:59:44 +0000","引力波宇宙广播系统零号控制站","@woiu 太好了"
"40395151830421504","40392270645563392","23063222","","","2011-02-23 12:58:49 +0000","引力波宇宙广播系统零号控制站","@wx0 确切地讲安全电压是\""不高于36V\""而不是\""36V\"", 呵呵. 话说要如何才能测它的电压呢?"
"40391869477158912","40390512645124096","23063222","","","2011-02-23 12:45:46 +0000","引力波宇宙广播系统零号控制站","@wx0 这是别人的测量结果, 我没验证过. 不过麻麻的感觉的确是存在的, 而且用适配器充电时麻感比用电脑的前置USB接口充电高"

"15637769883","15637418359","35192559","","","2010-06-07 15:44:15 +0000","强互作用力宇宙探测器","@Hc95 那就不是DOS程序啦,只是个命令行程序,就像Android里的adb.exe。$ adb push d:\hc95.tar.gz /tmp/ $ adb pull /system/hc95/eyes d:\re\"

导入后,带有反斜杠的行将会被破坏。

我该如何解决这个问题?我应该使用 sedawk 将所有 \ 替换为 \ (在 27797 行内...)?或者只需修改 SQL 查询就可以解决这个问题?

最佳答案

这更像是一种讨论,而不是直接的答案。最终数据(在数据库中)的值中间是否需要双引号?事实上,您有大量数据需要处理,这根本不会带来任何问题。

“”是 Oracle 对字符串内的引号所做的事情。我认为构建该文件的任何内容都试图转义引用序列。 This是 MySQL 的字符串手册。其中任何一个都是有效的::

select "hel""lo", "\"hello";

我倾向于将编辑与导入分开进行,这样可以更容易/更快地查看事情是否有效。如果您的文本文件小于 10MB,则通过 sed 更新它应该不会超过一分钟。

sed -e 's/\\//' foo.csv

根据您的评论,您可以将转义字符设置为“\”以外的其他字符

ESCAPED BY 'char'

这意味着加载程序应逐字添加值。如果它变得太复杂,如果在插入数据之前对数据进行 base64(),这将阻止任何工具破坏 UTf8 序列。

关于mysql - 如何将包含反斜杠的csv文件导入MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18404836/

相关文章:

php - 合并来自两个不同 MySql 查询的两个不同数组

powershell - 使用 csv 的 ForEach 中的 If 语句

php - 将csv文件导入homestead laravel中的mysql表字段

python - 在 Python 中解析 CSV 101

javascript - 如何转义 Handlebars 中的字符

linux - 如何在 shell 脚本中转义空格?

mysql - 将 MySQL 连接字符串动态更改为 Crystal Reports

php - 如何在codeigniter中找到gpa

linux - 包含括号的 awk 协进程的转义序列

mysql - 如何在我的 sql 结果中包含分组子查询?