有没有办法在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查询禁用转义字符?
答案 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
选项禁用此字符转义。