这在Java13 (JDBC)代码中失败了,所以我去MySQL工作台复制这个问题。
我运行一个简单查询,如下所示:
START TRANSACTION;
SET SESSION sql_mode = NO_BACKSLASH_ESCAPES;
SELECT *, "x\\x", "y\y" from dirs
WHERE d_pathname like 'E:\\\\BOOKS\\\\Dictionaries_and_Encyclopedias\\\\%' ORDER BY d_pathname;我得到400行的返回值。问题是,我不想使用双反斜杠。
返回的行将显示单个反斜杠,而不是双反斜杠。
有趣的是,x\\x和y\y子句看起来就像SELECT语句中所表示的那样。
当我删除LIKE子句中的双反斜杠时,我得到零行!
为什么?我不想重复反斜杠,运行简单整洁的代码。
发布于 2020-07-18 14:02:50
NO_BACKSLASH_ESCAPES模式仅影响在普通字符串文字中处理反斜杠的方式。它不会改变它们在LIKE模式中的处理方式。
但是,您可以使用ESCAPE选项指定一个不同的字符作为LIKE中的转义字符。只要使用模式中没有出现的其他字符即可。
WHERE d_pathname like 'E:\BOOKS\Dictionaries_and_Encyclopedias\%' ESCAPE '|'https://stackoverflow.com/questions/62965120
复制相似问题