MySQL命令行输出\\.而非\.的原因及解决方案
解决MySQL通过文件执行SQL时反斜杠转义问题
问题核心
在MySQL交互客户端中,输入的\\会被客户端自动转义为单个\,因此select '\\.';能输出\.;但通过文件重定向执行时,默认情况下MySQL客户端不会处理反斜杠转义,直接将文件中的\\传给服务端,最终输出\\.。
两种解决方案
方案1:修改执行命令,启用客户端反斜杠转义
在执行mysql命令时添加--escape-backslashes参数,让非交互模式下的客户端和交互模式一样处理反斜杠:
mysql -h mysqlhost -u admin -p -N --escape-backslashes mydatabase < reverse.sql
此时SQL文件reverse.sql保持原有内容即可:
select '\\.';
方案2:调整SQL文件中的反斜杠数量
如果不想修改命令参数,可直接在SQL文件中使用4个反斜杠,让MySQL服务端解析为单个反斜杠:
修改reverse.sql内容为:
select '\\\\.';
执行命令保持不变:
mysql -h mysqlhost -u admin -p -N mydatabase < reverse.sql
原理:MySQL服务端默认会将连续两个反斜杠解析为一个,因此4个反斜杠最终会被转换为单个反斜杠,结合句点输出\.。
内容的提问来源于stack exchange,提问作者Umut TEKİN
相关产品推荐
相关产品推荐

