在MySQL中选择一些特殊字符时的奇怪行为

时间:2016-09-28 08:20:03

标签: php mysql

我有一行,其列url具有以下值:

http://example.com/a~~1234567890-=!@#$%^&*()_+[\"test\"]

当我执行以下查询时:

SELECT * FROM `mytable` WHERE `url` = 'http://example.com/a~~1234567890-=!@#$%^&*()_+[\"test\"]'

MySQL说该记录不存在。

1 个答案:

答案 0 :(得分:3)

你需要在你的两个中逃脱\“因为\”是一个转义序列:只有引号“将保留在执行的查询中。

\“[转义序列变为双引号(”“”)字符
\\ [是一个转义为反斜杠(“\”)字符的转义序列

http://dev.mysql.com/doc/refman/5.7/en/string-literals.html

所以

SELECT * FROM `mytable` WHERE `url` = 'http://example.com/a~~1234567890-=!@#$%^&*()_+[\\"test\\"]'