sqlite未转义“字符 - 如何逃避双引号?

时间:2015-01-14 19:46:24

标签: sqlite

我无法导入到sql lite中。 我正在将表从Sql Server导出到以UTF-8编码的平面文件中。然后尝试将平面文件导入sqlite db。 DB是UTF-8编码的。

这些行很麻烦(制表符分隔,行以CRLF结尾):

ID  w   posid   def
1234    bracket 40  "(" and ")" spec...

1234    bracket 40  Any of the characters "(", ")", "[", "]", "{", "}", and, in the area of computer languages, "<" and ">".

错误:

未转义的“角色

我尝试用“双引号”替换引号“”仍然无法正常工作。

导入设置:标签分隔符

.separator“”

.import data.txt words

sqlite表架构:

CREATE TABLE words (ID integer NOT NULL, w TEXT  NOT NULL, posid integer NOT NULL, def TEXT NOT NULL);

更新: 不知何故,在Sql Server的def字段开头添加一个哈希工作:

更新单词设置def ='#'+ def

不确定为什么会这样。这很有效,但它在现场添加了一个不需要的角色。

2 个答案:

答案 0 :(得分:3)

事实证明,当有新行字符,引号或逗号时,导入会搞乱。

一种解决方案是将这些字符替换为其他字符序列或字符代码(例如char(1),char(2)...),并确保字段不包含这些序列或代码,你运行导入。例如,将引号替换为 - - ,然后导入,然后替换 - - 再次使用引号。我有另一个表,其中一些文本字段有新行字符,这个解决方案似乎有效。

before import:

update [table] set comment = REPLACE(comment, CHAR(13), '-*-')
update [table] set comment = REPLACE(comment, CHAR(10), '%-$-%')
update [table] set comment = REPLACE(comment, '"', '%-&-%')

after import:

update [table] set comment = REPLACE(comment, '-*-', CHAR(13))
update [table] set comment = REPLACE(comment, '%-$-%', CHAR(10))
update [table] set comment = REPLACE(comment, '%-&-%', '"')

答案 1 :(得分:0)

要执行此操作而不更改输入数据,请使用ascii模式并将列分隔符设置为tab,将行分隔符设置为CRLF。

.mode ascii
.separator "\t" "\r\n"

有关原因的解释,请参见我的答案to this other question