MySQL中执行UNCOMPRESS操作后如何保留转义字符?
问题根因
转义符丢失本质是MySQL默认字符串解析规则导致的:反斜杠\在MySQL默认配置下本身就是转义字符,你写SQL语句时传入的Test\"Me里的\会在字符串解析阶段就被MySQL吃掉,用来标识后面的"是普通字符,最终存入压缩数据的内容本身就没有\,所以解压后自然不会出现。
解决方案
场景1:直接在MySQL中写字符串字面量
要保留字面量\,需要对\本身做转义,写两个\\代表一个实际存储的\。你的语句修改为:
SELECT UNCOMPRESS(COMPRESS("Test\\\\\"Me"));
执行后就能得到预期的"Test\"Me"结果。
这里的转义逻辑:
- 两个
\\会被解析为一个实际的\ \"会被解析为一个实际的"- 组合起来
\\\\\"最终解析为\",匹配你的预期。
场景2:应用程序调用MySQL执行语句
不要手动拼接SQL语句,使用参数化查询传入字符串参数。参数化查询会自动处理转义逻辑,你直接传入原始的Test\"Me字符串即可,无需手动添加额外转义符,同时还能避免SQL注入风险。
特殊配置适配
如果你的MySQL开启了NO_BACKSLASH_ESCAPES模式,反斜杠会被识别为普通字符,不需要额外转义,此时转义双引号直接写两个"即可,语句改为:
SELECT UNCOMPRESS(COMPRESS('Test""Me'));
你可以先执行SELECT "Test\\\\\"Me";查看输出是否符合预期,确认解析正确后再添加压缩、解压逻辑,排查效率更高。
内容的提问来源于stack exchange,提问作者S. Jaisimha
相关产品推荐
相关产品推荐

