MySQL字符串拼接主要用CONCAT()函数,遇NULL返回NULL;CONCAT_WS()可指定分隔符并自动跳过NULL;+号非标准拼接方式,不推荐使用。

MySQL中字符串拼接主要用 CONCAT() 函数,这是最常用、最标准的方式;此外还有 CONCAT_WS()(带分隔符拼接)和使用 + 号(仅在某些模式下生效,不推荐)等方法。
使用 CONCAT() 拼接多个字符串或字段
CONCAT() 接收任意数量的参数,逐个连接,遇到 NULL 会返回 NULL(需注意空值处理)。
- 基本语法:CONCAT(str1, str2, ...)
- 示例:SELECT CONCAT('Hello', ' ', 'World'); → 返回 'Hello World'
- 拼接字段:SELECT CONCAT(first_name, ' ', last_name) AS full_name FROM users;
- 处理 NULL:若某字段可能为 NULL,可用 IFNULL() 或 COALESCE() 替换,如 CONCAT(IFNULL(name, ''), '-', IFNULL(age, ''))
使用 CONCAT_WS() 添加分隔符拼接
CONCAT_WS 是 “Concatenate With Separator” 的缩写,第一个参数是分隔符,后续参数是待拼接内容,自动跳过 NULL 值(但空字符串 '' 会被保留)。
- 语法:CONCAT_WS(separator, str1, str2, ...)
- 示例:SELECT CONCAT_WS(', ', 'Apple', 'Banana', NULL, 'Cherry'); → 返回 'Apple, Banana, Cherry'
- 实用场景:生成逗号分隔的标签列表、地址字段组合等
其他方式与注意事项
MySQL 8.0+ 支持 REPEAT()、INSERT() 等辅助函数,但拼接核心仍靠 CONCAT 系列。另外需注意:
- + 号不是字符串拼接操作符:默认是算术加法;只有当 sql_mode 包含 PIPES_AS_CONCAT 时,|| 才等价于 CONCAT(且需关闭 STRICT_TRANS_TABLES 等限制),不建议依赖
- 字符集问题:拼接不同字符集字段时,MySQL 会尝试转换,若失败会报错,建议统一字段字符集(如 utf8mb4)
- 性能提示:大量拼接 + 多表 JOIN 时,尽量在应用层处理,避免拖慢 SQL 执行










