MySQL更新语句中反斜杠失效问题求助
MySQL中反斜杠转义导致UPDATE语句失效的解决办法
问题场景
直接使用含单个反斜杠的路径执行UPDATE时,因MySQL将\视为转义字符,语句无法正常执行:
UPDATE midshared.SETUP SET DATAVALUE = 'C:\Documents and Settings\ADMINISTRATOR\Desktop\' WHERE CODE = 'SAGEPATH'
手动将每个\替换为\\后,语句可正常执行:
UPDATE midshared.SETUP SET DATAVALUE = 'C:\\Documents and Settings\\ADMINISTRATOR\\Desktop\\' WHERE CODE = 'SAGEPATH'
但以下两种尝试的方法均无效:
REPLACE函数方式:传入的字符串中
\已被提前转义,REPLACE无法识别原始单反斜杠:UPDATE midshared.SETUP SET DATAVALUE = REPLACE('C:\Settings\ADMINISTRATOR\Desktop\','\','\\') WHERE CODE = 'SAGEPATH'QUOTE函数方式:同样因原字符串的
\被提前转义,QUOTE无法正确处理原始路径:UPDATE midshared.SETUP SET DATAVALUE = QUOTE('C:\Documents and Settings\ADMINISTRATOR\Desktop\') WHERE CODE = 'SAGEPATH'
有效解决方向
坚持双反斜杠转义
这是最通用且可靠的方案,确保每个路径中的\都替换为\\,让MySQL正确解析并存储单个反斜杠。启用NO_BACKSLASH_ESCAPES模式
- 临时启用(当前会话生效):
启用后可直接使用单反斜杠路径执行UPDATE:SET SESSION sql_mode = 'NO_BACKSLASH_ESCAPES';UPDATE midshared.SETUP SET DATAVALUE = 'C:\Documents and Settings\ADMINISTRATOR\Desktop\' WHERE CODE = 'SAGEPATH' - 全局生效:修改MySQL配置文件(如my.cnf/my.ini),添加
sql_mode = NO_BACKSLASH_ESCAPES,重启服务后永久生效。
- MySQL 8.0+使用原始字符串语法
对于MySQL 8.0及更高版本,可使用r''包裹原始字符串,其中反斜杠无需转义:
UPDATE midshared.SETUP SET DATAVALUE = r'C:\Documents and Settings\ADMINISTRATOR\Desktop\' WHERE CODE = 'SAGEPATH'
内容的提问来源于stack exchange,提问作者AndyD
相关产品推荐
相关产品推荐

