如何在MySQL查询结果中移除LRM字符(U+200E)
如何在MySQL中移除查询结果里的U+200E(LRM)字符
刚碰到过类似的问题!LRM(Left-to-Right Mark,U+200E)这种隐形字符确实烦人,悄咪咪混在文本里搞乱输出或者后续处理。下面是几种在MySQL里搞定它的实用办法:
1. 查询时临时移除(不改动原数据)
最直接的方式是在SELECT语句里用REPLACE()函数过滤掉这个字符。因为U+200E属于Unicode补充字符,要确保用utf8mb4编码来识别它:
方法一:使用Unicode转义序列(MySQL 5.6+支持)
SELECT REPLACE(your_column, _utf8mb4'\u200E', '') AS cleaned_column FROM your_table;
方法二:使用十六进制编码
如果你的MySQL版本不支持\u转义,也可以用字符的十六进制值来指定:
SELECT REPLACE(your_column, CHAR(0x20, 0x0E USING utf8mb4), '') AS cleaned_column FROM your_table;
这样查询返回的结果就会自动去掉所有LRM字符,原表数据不受影响。
2. 永久清理表中的LRM字符
如果这些字符是冗余数据,想彻底从表中清除,可以用UPDATE语句批量处理:
UPDATE your_table SET your_column = REPLACE(your_column, _utf8mb4'\u200E', '') WHERE your_column LIKE CONCAT('%', _utf8mb4'\u200E', '%');
👉 执行前建议先跑个SELECT验证要更新的内容,避免误操作:
SELECT your_column, REPLACE(your_column, _utf8mb4'\u200E', '') AS cleaned_version FROM your_table WHERE your_column LIKE CONCAT('%', _utf8mb4'\u200E', '%');
3. 批量清理多种隐形控制字符(MySQL 8.0+)
如果数据里还有RLM(U+200F)之类的其他控制字符,可以用REGEXP_REPLACE()一次性处理:
SELECT REGEXP_REPLACE(your_column, '[\\x{200E}\\x{200F}]', '') AS cleaned_column FROM your_table;
这个正则表达式会匹配并移除LRM和RLM两种标记,你可以根据需要添加更多控制字符的Unicode编码。
注意事项
- 确保你的表/列字符集是
utf8mb4,普通utf8(实际是utf8mb3)无法正确识别U+200E这类补充Unicode字符,会导致替换失败。 - 如果是导出数据后发现有LRM,也可以在导出时用上述查询直接导出清理后的结果,省去后续处理步骤。
内容的提问来源于stack exchange,提问作者Yirmiyahu Fischer
相关产品推荐
相关产品推荐

