【问题标题】:How to escape double quote in string in SQLite query?如何在 SQLite 查询中转义字符串中的双引号?
【发布时间】:2016-12-29 16:27:13
【问题描述】:

我正在尝试基于 SQLite 中的字符串进行查询,但我遇到的问题是字符串包含双引号 (")。我还没有弄清楚如何转义它。

我正在使用 SQLite 数据库浏览器。字符串是 3" Nail。它是以编程方式插入的,但是当我尝试以编程方式或通过 SQLite 浏览器查询它时,它返回零行,注意我的查询,但字符串文字为 '3&quot Nail'(在'quot'部分后面有一个分号,但我不能把它放在这里,或者它把它翻译成“)。我怀疑这是我的问题;插入的字符与我尝试查询的字符不同,但我不知道如何确定。

作为记录,我尝试使用单引号 (') 和反斜杠 (\) 进行转义,因此我尝试了以下查询:

 1. SELECT * FROM TABLE WHERE NAME = '3" Nail';
 2. SELECT * FROM TABLE WHERE NAME = '3\" Nail';
 3. SELECT * FROM TABLE WHERE NAME = '3'" Nail';
 4. SELECT * FROM TABLE WHERE NAME = '3'''' Nail';
 5. SELECT * FROM TABLE WHERE NAME = '3\'\' Nail';

任何帮助将不胜感激!

-----更新-----

全部。我道歉。取消狩猎。我已经解决了这个问题。

为了简化问题,我展示了一个简单的查询,但我实际尝试的查询更复杂。它涉及一个 JOIN,它失败了,因为插入数据的功能关闭了。它首先插入到一个表中,然后在该表中查询刚刚插入的项目的 ID,并在插入到第二个表中时使用该 ID。该查询在名称周围使用了转义的双引号 (\") 而不是单引号 (')。显然这在正常情况下工作得很好,但在双引号的情况下会卡住,因此对 ID 的查询返回零行,并且,因此,没有执行二次插入。

由于我的查询使用了这些表的 JOIN,并且第二个表中没有该名称的数据,因此它成功完成,但返回零行。我检查了第一个表以确保我需要的数据在那里,但我什至没有想到要检查另一个表。

我更正了插入功能,现在查询可以正常工作了。

我应该在发布问题之前进行更好的调查。很抱歉,但衷心感谢您的所有帮助。

【问题讨论】:

  • 连续两个?
  • @rory.ap 不需要转义双引号。
  • @Joseph 第一次查询不起作用?表中实际存储了什么? ""?
  • @rory.ap 我试过使用两个双引号,但这也不起作用。它说的和上面一样,但是用 '3" ;" ;钉子'。
  • 它发生了。但是下一次,对于 SQL 问题,最好准备一个可重现的案例。 sqlfiddle (sqlfiddle.com) 让它变得简单:)

标签: sql database string sqlite escaping


【解决方案1】:

SQL 标准指定字符串中的单引号通过将两个单引号放在一行中进行转义。在这方面,SQL 的工作方式类似于 Pascal 编程语言。 SQLite 遵循这个标准。

它也适用于双引号。

INSERT INTO TABLENAME VALUES("WHAT""S THAT")
INSERT INTO TABLENAME VALUES("WHAT''S THAT")

阅读此How do I use a string literal that contains an embedded single-quote (') character

【讨论】:

  • 这个解决方案对我有用。谢谢你。在我的用例中,我不能使用“应该”使用的占位符。单引号/双引号的加倍效果很好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-24
  • 2013-01-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多