喜欢在mysql中加入特殊字符\

时间:2011-09-08 05:53:02

标签: mysql

我的查询是SELECT * FROM PMT_PROJECT WHERE PROJECT_CODE LIKE '%A3\7\2011%' AND COMPANY_ID=14。 PROJECT_CODE列包含完全匹配记录但是,我的上述查询无法从MySql db获取记录。请纠正我关于\特殊字符的语法,如果上述查询中有错误,或者建议我如何获取上述记录。

2 个答案:

答案 0 :(得分:8)

mysql中的反斜杠很难。我只是直接从mysql客户端运行测试,发现要添加字段,你只做一个转义(两个反斜杠):

INSERT INTO mytable (field1) VALUES ('ASDFA3\\7\\2011QWER');

但是使用LIKE命令,转义需要按字面表示,因此您需要双重转义语句(四个反斜杠):

SELECT * FROM mytable WHERE field1 LIKE '%A3\\\\7\\\\2011%';

添加应用程序层所需的转义,它可能会让人感到困惑。另一种方法是使用单个字符通配符:

SELECT * FROM mytable WHERE field1 LIKE '%A3_7_2011%';

另一种方法是使用'NO_BACKSLASH_ESCAPES'模式:

SET SESSION sql_mode='NO_BACKSLASH_ESCAPES';
SELECT * FROM mytable WHERE field1 LIKE '%A3\7\2011%';
编辑(谢谢,lucek):

或者,保留当前的sql_mode:

SET @temp_sql_mode = @@SESSION.sql_mode;
SET SESSION sql_mode = CONCAT_WS(',', @@SESSION.sql_mode, 'NO_BACKSLASH_ESCAPES');
-- YOUR_SELECT_GOES_HERE;
SET SESSION sql_mode = @temp_sql_mode;

答案 1 :(得分:0)

反斜杠是MySQL中的标准转义字符。如果要按字面意思使用反斜杠字符,则必须为此查询定义另一个转义字符:

SELECT *
FROM PMT_PROJECT
WHERE PROJECT_CODE LIKE '%A3\7\2011%' ESCAPE '|' AND COMPANY_ID=14