SQLite - 从csv文件将带有换行符的字符串插入数据库

I82*_*uch 6 database sqlite string android

所有,

我试图在TEXT字段中的SQLite数据库中注入一个长文本条目.这个文本中有新的行(即它跨越多个段落).

如果我手动执行INSERT,我可以显示新行:

INSERT INTO "LOGENTRY" VALUES(5,40,'PLACE','line1
line2

line4
',1283990533315,'4A','TEXT','',NULL);
Run Code Online (Sandbox Code Playgroud)

但是如果我在CSV文件中有相同的文本并尝试将它导入到表中,我会得到一个错误,它预计会有更多列存在(一旦遇到新行,程序就会认为它是结束了输入,因此它缺少列).

这可能吗?或者是手动执行每个INSERT的唯一方法?

Jam*_*son 5

您的问题是csv格式:sqlite不支持包含换行符的值.

在sqlite方言中:

  • 逗号分隔字段

  • 双引号可用于对包含逗号的字段进行分组.

  • 新行分隔记录

您需要转义/删除新行,或使用其他更合适的文件格式.

以下(sed)常规表达将"删除"不需要的换行符

s/\(,"[^",]*\)$/\1\1/g
Run Code Online (Sandbox Code Playgroud)

  • “官方”“text/csv”定义(RFC 4180)确实允许字段内换行。不幸的是,并非每个实现都支持它们。CSV 还有其他几个不适合 SQL 表的原因,其中一个重要原因是缺乏区分“''”和“NULL”的方法。 (2认同)