value中出现csv分隔符怎么办?

value中出现csv分隔符怎么办?

假设我的 csv 文件包含

"item_name","price","description"
mobile,500$,It has many features (e.g., camera, big display, etc)  

我想使用 mysql 命令在 mysql 数据库中加载这个 csv 数据文件

load data local infile 'file.csv' into table table
 fields terminated by ','
 lines terminated by '\n'
 (column1, column2, column3,...)  

您也可以说使用mysql 的"and using选项将每个值括起来。enclosed by '"'但包含每个值对我来说是开销。

description如果有一种解决方案可以读取这种类型的 csv(其中包含一列"但不是全部列),我只能包含值。

答案1

将字段分隔符从逗号更改为文件中不存在的内容。如果您可以控制 CSV 文件的创建内容,那么这应该不会太困难。

csvkit,如果最后一个字段被正确引用,则可以完成此操作:

$ cat file.csv
"item_name","price","description"
mobile,500$,"It has many features (e.g., camera, big display, etc)"

$ csvformat -D@ file.csv
item_name@price@description
mobile@500$@It has many features (e.g., camera, big display, etc)

或者,在没有 的情况下csvformat,假设每行的前两个逗号是真正的分隔符:

$ sed -e 's/,/@/' -e 's/,/@/' file.csv

这不需要引用最后一个字段。

将其重定向到一个新文件,然后使用

load data local infile 'newfile.csv' into table table
 fields terminated by '@'
 lines terminated by '\n'
 (column1, column2, column3,...)  

答案2

我称其为复杂领域我个人赞成对它们进行编码,例如base64

$ echo "It has many features (e.g., camera, big display, etc)"  | base64
SXQgaGFzIG1hbnkgZmVhdHVyZXMgKGUuZy4sIGNhbWVyYSwgYmlnIGRpc3BsYXksIGV0YykK

但这样做当然有利有弊。

相关内容