如何在SQL中将这类转义Unicode字符替换为空格
SQL替换不可见Unicode控制字符并清理冗余标签方案
需求场景
原始字符串(示例A):
My Name is <strong></strong>Vinaykumar. I am <strong></strong>From AndhraPradesh. I have completed my B.tech in Osmania University
目标字符串(示例B):
My Name is Vinaykumar. I am From AndhraPradesh. I have completed my B.tech in Osmania University
需要实现:将字符串中的不可见Unicode控制字符(如U+001A)替换为空格,同时移除包裹该字符的<strong>冗余标签。
实现步骤与代码
1. 定位目标字符
示例中的是U+001A(ASCII替换字符,SUB),属于非打印控制字符,可通过Unicode编码直接匹配。
2. 分数据库方言处理
MySQL/MariaDB
先替换控制字符为空格,再清理空的<strong>标签:
-- 合并写法 SELECT REGEXP_REPLACE( REPLACE(your_column, CHAR(26 USING utf8mb4), ' '), '<strong>\\s*</strong>', '' ) AS cleaned_text FROM your_table;
PostgreSQL
同样先替换控制字符,再用正则移除冗余标签:
SELECT REGEXP_REPLACE( REPLACE(your_column, CHR(26), ' '), '<strong>\s*</strong>', '', 'g' ) AS cleaned_text FROM your_table;
SQL Server(2017+)
利用REGEXP_REPLACE完成标签清理,结合REPLACE替换控制字符:
SELECT REGEXP_REPLACE( REPLACE(your_column, CHAR(26), ' '), '<strong>\s*</strong>', '' ) AS cleaned_text FROM your_table;
3. 扩展处理:批量替换所有控制字符
如果字符串中存在其他ASCII控制字符(U+0000至U+001F),可以用正则一次性替换:
- MySQL:
REGEXP_REPLACE(your_column, '[\\x00-\\x1F]', ' ') - PostgreSQL:
REGEXP_REPLACE(your_column, '[\x00-\x1F]', ' ', 'g') - SQL Server:
REGEXP_REPLACE(your_column, '[\x00-\x1F]', ' ')
注意事项
- 确保数据库字符集为
utf8mb4(MySQL)或其他支持完整Unicode的字符集,避免编码转换错误。
内容的提问来源于stack exchange,提问作者vinay reddy
相关产品推荐
相关产品推荐

