在MySQL查询中禁用转义字符

时间:2012-02-24 09:09:10

标签: mysql

有没有办法在MySQL查询中禁用转义字符?例如,对于下表:

mysql> select * from test1;
+------------------------+-------+
| name                   | value |
+------------------------+-------+
| C:\\media\data\temp\   |     1 |
| C:\\media\data\temp    |     2 |
| /unix/media/data/temp  |     3 |
| /unix/media/data/temp/ |     4 |
+------------------------+-------+

我希望以下内容成为有效的查询:

mysql> select * from test1 where name='C:\\media\data\temp\';

我知道我可以改用

mysql> select * from test1 where name='C:\\\\media\\data\\temp\\';

但我正在使用my_snprintf()构建此查询,因此我必须使用

C:\\\\\\\\media\\\\data\\\\temp\\\\

......等等! 有没有办法为单个MySQL查询禁用转义字符?

2 个答案:

答案 0 :(得分:10)

您可以通过在SQL模式下设置NO_BACKSLASH_ESCAPES来禁用反斜杠转义:

-- save mode & disable backslashes
SET @old_sql_mode=@@sql_mode;
SET @@sql_mode=CONCAT_WS(',', @@sql_mode, 'NO_BACKSLASH_ESCAPES');

-- run the query
SELECT 'C:\\media\data\temp\';

-- enable backslashes
SET @@sql_mode=@old_sql_mode;

答案 1 :(得分:2)

对于MySQL命令行中的表格输出,列周围的“装箱”可以将一个列值与另一个列值区分开来。对于非表格输出(例如以批处理模式或在给出--batch--silent选项时生成),特殊字符将在输出中转义,以便可以轻松识别它们。换行符,制表符,NUL和反斜杠写为\ n,\ t,\ 0和\。 --raw选项禁用此字符转义。