mysql 5.7不支持trim(str)简写,必须写trim(both ' ' from str);8.0+及标准sql支持trim(str),且trim仅支持单字符修剪,多字符或字符串会报错。

TRIM 函数能直接去掉字符串两端空格,但注意:MySQL 5.7 及更早版本不支持只写 TRIM(str) 的简写形式,必须显式指定 BOTH 和 FROM。
TRIM 基本语法与兼容性差异
标准 SQL(PostgreSQL、SQL Server、MySQL 8.0+)支持简洁写法:TRIM(str),等价于 TRIM(BOTH ' ' FROM str)。但 MySQL 5.7 及之前会报错 ERROR 1064,必须写全:TRIM(BOTH ' ' FROM str)。
- PostgreSQL / SQL Server / MySQL 8.0+:可直接用
TRIM(col_name) - MySQL 5.7 及更早:必须写
TRIM(BOTH ' ' FROM col_name),漏掉BOTH或引号里的空格都会失败 - SQLite:只支持
TRIM(str),不支持LEADING/TRAILING等修饰符
去除空格以外的字符怎么办?
TRIM 不仅限于空格,可以指定任意单字符作为“修剪目标”,比如清理前后出现的 # 或引号。但注意:只能指定一个字符,不能传入字符串如 'abc' —— 否则 MySQL 报错 Invalid argument to native function trim,PostgreSQL 报 function trim(text, text) does not exist。
- 去首尾
#:TRIM('#' FROM col_name) - 只去开头空格(左裁剪):
TRIM(LEADING ' ' FROM col_name) - 只去结尾点号:
TRIM(TRAILING '.' FROM col_name) - 错误示范:
TRIM('xy' FROM col_name)→ 语法不合法
和 LTRIM/RTRIM 比有什么区别?
TRIM 是标准 SQL,语义更明确;LEFTTRIM 和 RTRIM 是厂商扩展,行为基本一致但跨数据库迁移时容易出问题。例如 SQL Server 支持 RTRIM(LTRIM(col)),而 PostgreSQL 虽然也支持,但官方文档明确建议优先用 TRIM。
- 功能等价但写法不同:
TRIM(BOTH ' ' FROM col)≡TRIM(col)≡RTRIM(LTRIM(col)) - 性能无实质差异,但嵌套
RTRIM(LTRIM())在某些旧版 SQLite 中可能触发额外函数调用开销 - 如果要同时处理多种字符(如空格 + 制表符),
TRIM无法做到,得靠正则或自定义函数
真正容易被忽略的是 MySQL 版本兼容性 —— 很多线上系统仍跑在 5.7 上,写 TRIM(col) 看似干净,一执行就报错。别光看文档写的“支持 TRIM”,先 SELECT VERSION() 确认环境再说。










