我在mysql中遇到麻烦...首先我的表有以下条目:
我想猜到为什么Forum des Halles,niveau - 4,rue l \'Orient-Express是重复 我尝试了以下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结果!!!
我不明白为什么!印刷品是完全一样的,似乎l \'没有工作h'Orient正在工作。我对发生的事情感到非常困惑......你能帮助我吗?
答案 0 :(得分:0)
你的字符串是:
... rue l \'Orient ...(包含2个必须在查询中转义的特殊字符)
要与LIKE匹配,你必须使用:
'%\\\' 东方%'
因为 \ 必须转义,所以必须使用 \\ ,撇号是必须转义的特殊字符,因此必须表达'如 \'。
就是这样。
除了您的上一次查询,您的模式与 l'Orient 相匹配(并且您的表格中没有此类内容)但您必须匹配 l \'Orient
...您的上一个查询与'Orient 匹配,因此可以正常运行。
BTW:记住这个字符串我把它粘贴到Mysql提示符中 - 如果用于PHP,Java代码等 - 你必须注意字符串在这些语言中的转义,所以你可能需要更多的反斜杠而不是这里所示(两倍多 - 因此你说6个反斜杠适合你 - 所以它在代码中。)为了确保您的查询看起来像我的 - 在PHP中 - 只需打印它 - 它会向您显示您的反斜杠计数减少2倍,这个数量将在实际查询中 - 而不是您在PHP代码中看到的。
当然 - 如果您使用任何mysql / mysqli转义例程,它将会有所不同;-)并且必须考虑所有这些。
read MYSQL string literals and escaping special chars
<强> Sumary:强>
如果你在mysql控制台中输入你的查询是不同的故事,不同的是嵌入在PHP中的字符串中,不同的使用转义例程。从mysql提示符开始,如果正常工作,请调整PHP。