【数据库使用】 异常空格

举报
超人来了 发表于 2025/10/25 17:34:47 2025/10/25
【摘要】 背景使用replace进行替换时,无法替换SELECT replace(‘1 2 3456’,’ ‘,’');第一个空格无法替换,第二个可以替换成功。把第一个空格复制出来,放到客户端编辑器里时被自动转换成普通空格,通过观察很难识别。规避使用replace把目标字段先截取出来,再嵌套在replace里。根因普通空格的ascII是32异常空格的ascII是194原因是字符串中的一个空格(ASCI...

背景
使用replace进行替换时,无法替换
SELECT replace(‘1 2 3456’,’ ‘,’');
image.png
第一个空格无法替换,第二个可以替换成功。
把第一个空格复制出来,放到客户端编辑器里时被自动转换成普通空格,通过观察很难识别。

规避
使用replace把目标字段先截取出来,再嵌套在replace里。

根因
普通空格的ascII是32
image.png
异常空格的ascII是194
image.png

原因是字符串中的一个空格(ASCII:32)被UTF-8编码之后变成了字符(ASCII:194 和 160的组合)。在 UTF-8编码里面存在一个特殊的字符,其编码是“0xC2 0xA0”,转换成字符的时候表现为一个半角空格,跟一般的半角空格(ASCII 0x20)不同的是它的宽度不会被压缩,所以排版中常能用到它。但是GB2312、Unicode之类并没有这样的字符,所以转换后前台会显示为“?” 号,只是显示为问号而不是真正的问号,所以无法被替换。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。