2013-11-09 21 views
0

我有麻烦与MySQL中的请求......首先我所有的表都以下条目:MySQL的请求不返回什么都想

enter image description here

我试图猜测为什么Forum des Halles购物中心,niveau - 4,芸香L \'东方快车是一个重复 我曾尝试以下mysql的要求:

SELECT * FROM geocode where initial_req LIKE '%Forum des Halles, niveau - 4, rue l\'Orient-Express%' 

没有结果

SELECT * FROM geocode where initial_req LIKE "%Forum des Halles, niveau - 4, rue l\'Orient-Express%" 

没有结果

SELECT * FROM geocode where initial_req LIKE "%Forum des Halles, niveau - 4, rue l'Orient-Express%" 

没有结果

SELECT * FROM geocode where initial_req LIKE "%l\'Orient%" 

没有结果

SELECT * FROM geocode where initial_req LIKE "%l\'%" 

没有结果

SELECT * FROM geocode where initial_req LIKE "%\'Orient%" 

2结果!!!

我不明白为什么!印刷品完全一样,看起来我不在工作。“东方正在工作。我真的很困惑发生了什么......你能帮助我吗?

+0

SELECT * FROM地理编码,其中initial_req像“%L \\\'东方%”没有返回过 – user1998000

+0

我们怎么能告诉你为什么你已经在你的表重复数据? – Artur

+0

SELECT * FROM'geocode' WHERE'initial_req' LIKE'%Forum des Halles,niveau - 4,rue l \\\\\''Orient-Express%'正在返回2行,但为什么这对我来说很神秘 – user1998000

回答

0

你的字符串是:

...芸香L \'东方......(包含必须在查询中逃脱2个特殊字符)

与喜欢你与之匹敌必须使用:

'%\\\' 东方%”

因为\必须进行转义,你必须使用\\和撇号是一个特殊字符必须转义也因此必须表示为\”

这就是全部。

所以除了你的最后一个查询你的模式匹配L'东方(和你没有在表中这样的事情),但你必须匹配L \'东方

...和你的最后一次查询匹配'东方因此它的工作。

BTW:请记住,我给你的这个字符串被粘贴到Mysql提示符中 - 如果从PHP,Java代码等使用 - 你必须注意这些langs中的字符串转义,所以你可能需要更多的反斜杠(两倍 - 因此你说6个反斜杠适用于你 - 所以它在代码中)。

为了确保您的查询看起来像我的 - 在PHP中 - 只是打印它 - 它会告诉你,你的反斜杠计数是2倍以下这个数量将在实际查询 - 而不是你在你的PHP代码中看到。

当然 - 如果你使用任何在MySQL/MySQLi逃逸程序会有所不同;-)而这一切都必须加以考虑。

read MYSQL string literals and escaping special chars

Sumary:

这是不同的故事,如果你在你的查询在MySQL控制台,使用转义例程或不diferent网络连接类型,不同的,如果嵌入PHP字符串中。从MySQL提示开始,并在你的PHP中调整,如果工作。

+0

是的,我知道,我很抱歉,在所有请求中,我忘了这一个:SELECT * FROM geocode where initial_req LIKE“%\\\ Orient%”,它也不返回任何结果,唯一正在工作的是以下一个SELECT * FROM geocode where initial_req LIKE“%\\\\\''Orient%” – user1998000

+0

图片太小 - 在Orient或撇号之前双引号? – Artur