SQL中查不到的“空格”常为u00A0、等不可见字符需用HEX()/DUMP()诊断MySQL用嵌套REPLACE()或REGEXP_REPLACE()清洗PostgreSQL推荐translate()或REGEXP_REPLACE()。SQL里查不到的空格很可能是u00A0或这类不可见字符肉眼看着是“正常字符串”WHERE name 张三却查不到——大概率是数据里混入了全角空格、不间断空格u00A0、制表符、零宽空格u200B等。这些字符在SELECT中常被UI截断或渲染为“空白”但数据库严格区分字节值匹配必然失败。实操建议先用HEX()或ENCODE()PostgreSQL看原始字节SELECT HEX(name) FROM users WHERE id 123比对末尾是否多出A0u00A0或09MySQL用DUMP()更直观SELECT DUMP(name) FROM users WHERE id 123直接显示ASCII/Unicode码点别依赖TRIM()——它默认只处理空格0x20对u00A0完全无效MySQL中用REPLACE()批量清理常见隐藏字符REPLACE()是最快上手的清洗方式但必须链式调用因为一次只能替换一种字符。注意嵌套过深会影响可读性5层以内较安全。常见组合示例MySQLSELECT REPLACE( REPLACE( REPLACE(name, u00A0, ), -- 全角空格→半角 , ), , )FROM usersWHERE name LIKE %张三%;关键细节MySQL 5.7 支持Unicode转义但需确保连接字符集为utf8mb4否则u00A0可能被截断用单引号包裹转义序列双引号在某些配置下会失效生产环境慎用UPDATE直接改先用SELECT验证效果再加LIMIT分批执行PostgreSQL用translate()一次性替换多字符更高效比起MySQL的嵌套REPLACE()PostgreSQL的translate()函数能用一次调用替换多个字符性能更好写法也更紧凑。语法translate(string, from_chars, to_chars)长度必须一致。 跃问 跃问是由阶跃星辰开发的免费AI智能问答助手随时帮你智能搜索、高效阅读、识图理解、和你畅聊感兴趣的话题。