【发布时间】:2016-12-29 16:27:13
【问题描述】:
我正在尝试基于 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,并且第二个表中没有该名称的数据,因此它成功完成,但返回零行。我检查了第一个表以确保我需要的数据在那里,但我什至没有想到要检查另一个表。
我更正了插入功能,现在查询可以正常工作了。
我应该在发布问题之前进行更好的调查。很抱歉,但衷心感谢您的所有帮助。
【问题讨论】:
-
连续两个?
-
@rory.ap 不需要转义双引号。
-
@Joseph 第一次查询不起作用?表中实际存储了什么?
"或"? -
@rory.ap 我试过使用两个双引号,但这也不起作用。它说的和上面一样,但是用 '3" ;" ;钉子'。
-
它发生了。但是下一次,对于 SQL 问题,最好准备一个可重现的案例。 sqlfiddle (sqlfiddle.com) 让它变得简单:)
标签: sql database string sqlite escaping