You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在数据库表字段中搜索隐形字符,解决重复用户名问题?

问题排查与修复方案

问题表现

  • 已设置用户名字段唯一约束的数据库表,在phpMyAdmin、SqlYog中查看时存在视觉上重复的用户名
  • 重复用户名在网页渲染后查看HTML源码,可发现前面带有‏(右向左标记)HTML实体,该字符无可见视觉表现,不会在页面直接展示
  • 使用SQL语句SELECT * FROM mytable WHERE username LIKE '%‏%';查询无对应结果,原因是数据库中存储的是隐形字符本身,而非转义后的HTML实体
  • 从SqlYog导出数据到Excel时,该隐形字符会显示为â€乱码

修复步骤

查询包含RLM隐形字符的记录

RLM字符的Unicode编码为U+200F,MySQL/MariaDB环境可使用如下语句查询:

SELECT * FROM mytable WHERE HEX(username) LIKE CONCAT('%', HEX(CHAR(0x200F using utf8mb4)), '%');

清理用户名中的冗余隐形字符

确认该字符为非法注入内容后,执行如下语句批量清理:

UPDATE mytable SET username = REPLACE(username, CHAR(0x200F using utf8mb4), '');

后续防护建议

  • 在用户名注册、修改的业务接口新增校验逻辑,过滤所有Unicode控制类字符,避免同类隐形字符被注入
  • 用户名入库前统一做字符归一化处理,配合数据库唯一约束彻底避免同类重复问题

内容的提问来源于stack exchange,提问作者Geoffrey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 19:45:04