需要只选择MySQL中包含反斜杠的数据

时间:2011-04-11 18:24:58

标签: mysql backslash

我正在尝试更正已经双重转义的数据库中的条目。我相信当使用mysql_real_escape_string时,magic_quotes已经打开了。双重转义导致一些搜索结果不正确/丢失。

我已关闭magic_quotes并计划搜索带有反斜杠的条目并更新它们以删除任何双重转义。麻烦的是,当我执行查询以搜索带有反斜杠的条目时,我总是得不到任何结果。

SELECT title FROM exampletable WHERE title LIKE '%\\\\%'

我在这里推荐使用'%\\\\%':http://dev.mysql.com/doc/refman/5.0/en/string-comparison-functions.html#operator_like

如果我输出每个标题,其中很多都有不需要的反斜杠,所以我知道它们就在那里。我似乎无法在查询中隔离它们。

Example Data:
Old King\'s Road
Running Down A Dream
Can\'t Stop The Sun
This One's For Me

再次,只是尝试返回带有\的条目。


编辑:MySQL版本是5.0.92-community。整理是latin1_swedish_ci。 Charset是UTF-8 Unicode

%\\%不起作用。我试过了。它在mysql.com上列为不正确:

  

要搜索“\”,请将其指定为“\\\\”;这是因为解析器会将反斜杠剥离一次,并且在进行模式匹配时再次剥离反斜杠,只留下一个反斜杠。

4 个答案:

答案 0 :(得分:5)

当我使用php运行命令时,此命令适用于我:

select * from exampletable where title like '%\\\\\\\\%' or title like '\\\\\\\\%' or title like '%\\\\';

我包括开头,任何地方和结束比赛的原因是为了表明它们是不同的。如果你在最后寻找反斜杠,那么只需要4个反斜杠。这是因为没有什么可以逃脱它。你在其他命令上使用8个反斜杠,因为它们会被php解析。

答案 1 :(得分:2)

你的查询在我的MySQL 5.5.8中运行正常:

mysql> create table exampletable (
  title varchar(255)
  ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Query OK, 0 rows affected (0.15 sec)

mysql> 
mysql> insert into exampletable values ('Old King\\''s Road'),
  ('Running Down A Dream'),('Can\\''t Stop The Sun'),('This One''s For Me');
Query OK, 4 rows affected (0.00 sec)
Records: 4  Duplicates: 0  Warnings: 0

mysql> 
mysql> select * from exampletable WHERE title LIKE '%\\\\%';
+---------------------+
| title               |
+---------------------+
| Old King\'s Road    |
| Can\'t Stop The Sun |
+---------------------+
2 rows in set (0.01 sec)

答案 2 :(得分:0)

尝试:

SELECT title FROM exampletable WHERE title LIKE '%\\%'

答案 3 :(得分:0)

在Ruby on Rails的情况下

search_value.gsub!(/\\/, "\\\\\\\\\\")
MyModel.where(["column_name ?","%#{search_value}%"])

如果您不想使用外卡,请添加它们。

search_value.gsub!(/%/, "\\%").gsub!(/_/, "\\_")