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