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

标签 sql database string sqlite 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';

非常感激任何的帮助!

- - -更新 - - -

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

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

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

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

在发布问题之前,我应该做更好的调查工作。我深表歉意,但衷心感谢您的帮助。

最佳答案

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

关于sql - 如何在 SQLite 查询中转义字符串中的双引号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41383538/

相关文章:

mysql - 如何从数据库中取出数据 "disappear"? MySQL

java - "main"java.lang.StringIndexOutOfBoundsException : String index out of range: 17

java - 在java中打印带有空字符的字符串

php - 在SQL中显示客户名称列表无访问报告的好方法是什么

sql - 具有存储库模式的抽象

sql - 在 SQL 数据库中存储 "list"的最正确方法是什么?

java - 如何从字符串中删除*字符并用颜色突出显示

mysql - SQL:如何将分号附加到列值。

sql - 如何在 Postgres 中生成包含数字 1 到 n 的数组

php - MySQL:如何对返回多个值的两列的总和进行分组?