如何在MySql中选择带有转义撇号的值?

时间:2011-02-04 14:14:39

标签: mysql escaping

我的表中有以下值:

当我不知道该怎么做时

注意撇号已经被转义。现在我想使用以下SQL字符串从该表中选择此值:

SELECT * FROM wp_wpsc_productmeta WHERE meta_value ='当我不知道该怎么做'

我收到了0行。当我将SQL字符串更改为:

SELECT * FROM wp_wpsc_productmeta WHERE meta_value LIKE'When I'Don%'

我正确地得到了我的结果集。所以,我的问题是,如何编写SQL字符串,以便当该值中有一个已经转义过的撇号时,我可以从表中选择一个值?

请不要回答我应该使用参数。我非常想用我正在尝试的方法找出答案。谢谢你的帮助!

3 个答案:

答案 0 :(得分:2)

您需要同时使用反斜杠和引号:

'I don\\\'t know';

为什么?

问题是斜杠和引号也是编程语言中的特殊字符。所以当你输入时:

'I don\'t know';

数据库看到的是'I don't know',它不存在。另一方面,如果您像这样双重逃避字符串:

'I don\\\'t know';

...发送到数据库的结果是'I don\'t know',这就是你想要的。

答案 1 :(得分:2)

如果数据库中的字符串实际上是“当我不知道该怎么做”时,如果包含反斜杠,那么要搜索它,您需要使用该语句。

SELECT * FROM wp_wpsc_productmeta WHERE meta_value = 'When I Don\\''t Know What To Do'

SELECT * FROM wp_wpsc_productmeta WHERE meta_value = 'When I Don\\\'t Know What To Do'

答案 2 :(得分:1)

您使用的是哪种语言?我认为这种语言可能是将逃避反斜杠解释为逃避它的好处,所以你可能需要做两次以确保数据库也能看到它:

'I don\\\'t know';