将文本数据导入 SQLite 时“未转义的“字符”

Gul*_*har 4 sqlite

我正在尝试导入一个以分号分隔的文本文件,其中每行以 CRLF 结尾。第一行包含字段,数据从第 2 行开始:

"Field1";"Field2"
"123";"Foo"
"456";"Bar"
Run Code Online (Sandbox Code Playgroud)

我尝试了以下操作,但失败并显示“input.csv:23:未转义的”字符”:

sqlite3.exe
sqlite> .separator ";"
sqlite> .mode csv MyTable
sqlite> .import input.csv MyTable
Run Code Online (Sandbox Code Playgroud)

知道我做错了什么吗?

谢谢。

Ebo*_*alm 6

对于sqlite,当要导入的数据可能包含双引号字符(")时,不要使用csv模式。读取每个CSV字段csv_read_one_field的代码会查找它,当找到它时,确保它被终止或期望它被引用。

将列分隔符更改为“;” 不会有帮助,因为该代码仍然会被执行。

另一方面,以 ascii 模式ascii_read_one_field读取每个字段的代码仅使用列和行分隔符来确定字段内容。

因此,使用 ascii 模式并将列和行分隔符设置为分号和行尾,如下所示:

*尼克:

sqlite> .mode ascii
sqlite> .separator ";" "\n"
sqlite> .import input.csv MyTable
Run Code Online (Sandbox Code Playgroud)

视窗:

sqlite> .mode ascii
sqlite> .separator ";" "\r\n"
sqlite> .import input.csv MyTable
Run Code Online (Sandbox Code Playgroud)

但是,这不会删除数据周围的双引号;它们被视为您数据的一部分。