我在一个文件中编写了数据库模式(到目前为止只有一个表)和该表的SQL语句。然后我创建了数据库如下:
$ sqlite3 newdatabase.db
SQLite version 3.4.0
Enter ".help" for instructions
sqlite> .read ./schema.sql
SQL error near line 16: near "s": syntax error
我的文件的第16行看起来像这样:
INSERT INTO table_name (field1, field2) VALUES (123, 'Hello there\'s');
问题是单引号的转义字符。我还尝试了对单引号进行双转义(使用\\\'
而不是\'
),但这也不起作用。我做错了什么?
8条答案
按热度按时间4zcjmb1e1#
尝试将单引号加倍(许多数据库都期望这样),所以它会是:
引用自the documentation:
字符串常量是通过将字符串括在单引号(')中形成的。字符串中的单引号可以通过将两个单引号放在一行中来编码-就像Pascal中一样。不支持使用反斜杠字符的C样式转义,因为它们不是标准SQL。BLOB文字是包含十六进制数据的字符串文字,前面有一个“x”或“X”字符。.文字值也可以是标记“NULL”。
vwhgwdsa2#
我相信你会想通过双引号来逃避:
mec1mxoz3#
替换字符串中的所有('),使用
举例说明:
gcxthw6b4#
以防万一,如果你有一个循环或json字符串,需要插入到数据库中。尝试将字符串替换为单引号。这是我的解决办法。例如,如果你有一个包含单引号的字符串。
这对我来说在C#和Java中很有效。
nwo49xxi5#
在C#中,你可以用下面的代码将单引号替换为双引号:
输出将是:
如果你是直接使用SQLite的话;你可以使用对象而不是字符串,并捕获像DBLOG这样的特殊东西:
rqqzpn5f6#
演示不需要复杂性或双引号的单引号字符串行为。
测试:
输出量:
SQLite版本:
输出量:
y1aodyip7#
根据the doc:
""
包围的""
被计算为"
,所以""""
是""
,""""""
是"""
(偶数),但"
,"""
和"""""
(奇数)不起作用。*""
可用于包围表和列名等标识符,SELECT
,WHERE
等,[]
和````也可用于包围标识符。''
包围的''
被计算为'
,所以''''
是''
,''''''
是'''
(偶数),但'
,'''
和'''''
(奇数)不起作用。*''
可用于包围字符串文字,如值。""
来包围字符串,因为根据我的实验会有错误。''
来包围标识符,因为根据我的实验,有时不能正常工作。例如,您可以使用
my"column
创建my"table
,如下所示:或者:
或者:
然后,您可以插入一行
my"value
,用于my"column
到my"table
,如下所示:或者:
或者:
最后,你可以得到如下所示的行:
或者:
或者:
并且,您可以使用
my'column
创建my'table
,如下所示:或者:
或者:
然后,您可以插入一行
my'value
,用于my'column
到my'table
,如下所示:或者:
或者:
最后,你可以得到如下所示的行:
或者:
或者:
fbcarpbf8#
在bash脚本中,我发现对于可能为null或包含需要转义的字符(如连字符)的值,转义值周围的双引号是必要的。
在本例中,columnA的值可以为null或包含连字符。