MySQL更新值为\的字段为null时报1064语法错误如何解决
报错原因
反斜杠\是MySQL默认的字符串转义字符,你直接在单引号内写单个反斜杠'\'时,反斜杠会把后续的单引号转义为普通字符,导致字符串没有正常闭合,最终触发1064语法错误。
正确SQL写法
你可以选择以下任意一种写法实现需求:
- 写法1:通过双反斜杠转义标识单个反斜杠
在MySQL字符串字面量中,要表示一个实际存在的反斜杠,需要写两个反斜杠(第一个用于转义第二个),语句如下:
如果你是通过shell命令、后端代码拼接SQL的方式执行,外层环境会先做一次转义,需要写四个反斜杠:-- 直接在MySQL客户端/GUI工具内执行用这版 UPDATE 替换为你的表名 SET 替换为你的字段名 = NULL WHERE 替换为你的字段名 = '\\';-- 代码/shell拼接SQL执行用这版 UPDATE 替换为你的表名 SET 替换为你的字段名 = NULL WHERE 替换为你的字段名 = '\\\\'; - 写法2:使用CHAR函数规避转义逻辑(更推荐,无转义兼容问题)
反斜杠的ASCII编码为92,直接通过CHAR函数生成反斜杠字符匹配即可,不需要处理任何转义规则:UPDATE 替换为你的表名 SET 替换为你的字段名 = NULL WHERE 替换为你的字段名 = CHAR(92);
注意事项
执行更新操作前,建议先运行SELECT语句确认匹配的记录是否符合预期,避免误修改数据:
SELECT * FROM 替换为你的表名 WHERE 替换为你的字段名 = CHAR(92);
同时确认你要修改的字段允许存储NULL值,否则会执行失败。
内容的提问来源于stack exchange,提问作者Elsa
相关产品推荐
相关产品推荐

