如何更新包含&、®等特殊字符的数据库列,避免被识别为替换字符
特殊符号字符串字段数据库更新操作指南
根因说明
大多数主流数据库本身原生支持存储&、®等特殊字符,出现更新时符号被替换的问题,通常是操作链路中的应用层转义、SQL拼接逻辑、客户端配置导致的,而非数据库本身不支持。
正确操作方案
前置检查
- 确认目标数据库列的字符集为支持Unicode的编码,例如MySQL的
utf8mb4、PostgreSQL/Oracle的UTF8,避免因字符集不支持导致符号被替换为乱码或占位符
不同场景操作方式
1. 直接执行原生SQL更新
- 无需对&、®做额外转义,直接写入更新语句即可,示例:
UPDATE your_table SET target_column = '包含&和®的目标字符串' WHERE id = 1;
- 若执行后仍出现符号被替换,检查你使用的SQL客户端是否开启了自动特殊字符转义配置,关闭对应配置后重新执行即可
2. 通过应用代码执行更新
- 必须使用*参数化查询(预编译SQL)*传参,禁止手动拼接SQL字符串,可避免应用层自动转义特殊字符,示例(Python操作MySQL为例):
import pymysql # 建立数据库连接逻辑省略 cursor = db.cursor() # 正确写法:参数化传参,特殊符号会被原样传入数据库 update_str = "包含&和®的目标字符串" cursor.execute("UPDATE your_table SET target_column = %s WHERE id = %s", (update_str, 1)) db.commit()
- 不要在业务代码中提前对字符串做HTML转义(比如将&转换为
&),除非业务逻辑明确要求存储转义后的内容
3. 需要存储HTML转义码场景
如果业务要求必须将&、®这类HTML转义码原封不动存入数据库,可对转义标识做声明,示例(MySQL):
UPDATE your_table SET target_column = '包含&和®的字符串' ESCAPE '&';
结果验证
更新完成后直接执行查询语句确认存储内容:
SELECT target_column FROM your_table WHERE id = 1;
若查询结果仍显示异常,优先排查查询链路的客户端、应用层是否做了自动转义展示,而非数据库存储问题。
内容的提问来源于stack exchange,提问作者vim
相关产品推荐
相关产品推荐

