如何在 SQLite 查询中转义字符串中的双引号?

Jos*_*rar 12 sql database sqlite string escaping

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

我正在使用SQLite 的数据库浏览器。该字符串是3" Nail。它是以编程方式插入的,但是当我尝试以编程方式或通过 SQLite 浏览器查询它时,它返回零行,记录我的查询,但字符串文字为'3" 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';
Run Code Online (Sandbox Code Playgroud)

非常感激任何的帮助!

- - -更新 - - -

全部。我道歉。取消狩猎。我已经弄清楚了这个问题。

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

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

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

在发布问题之前我应该​​更好地进行调查。我深表歉意,但真诚地感谢您的所有帮助。

sai*_*mar 11

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

它也适用于双引号。

INSERT INTO TABLENAME VALUES("WHAT""S THAT")
INSERT INTO TABLENAME VALUES("WHAT''S THAT")
Run Code Online (Sandbox Code Playgroud)

阅读本文如何使用包含嵌入式单引号 (') 字符的字符串文字