mysql如何使用concat连接字符串_mysql字符串函数实例

来源:这里教程网 时间:2026-02-28 20:50:21 作者:

MySQL CONCAT 函数的基本用法

CONCAT
是 MySQL 中最常用的字符串拼接函数,它接受一个或多个参数,将它们按顺序连接成单个字符串。只要任意一个参数为
NULL
,整个结果就返回
NULL
——这点非常关键,实际写 SQL 时容易踩坑。

常见写法示例:

SELECT CONCAT('Hello', ' ', 'World'); -- 返回 'Hello World'
SELECT CONCAT('id:', id, ', name:', name) FROM users;

注意:

CONCAT
不会自动跳过
NULL
值,比如
CONCAT('a', NULL, 'b')
结果是
NULL
,不是
'ab'

处理 NULL 值:用 CONCAT_WS 或 IFNULL 替代

当字段可能为

NULL
(如用户 middle_name 为空),直接用
CONCAT
会导致整条拼接结果丢失。这时候有两个更稳妥的选择:

CONCAT_WS
(W S = With Separator):第一个参数是分隔符,后续参数自动跳过
NULL
,只拼接非空值。例如
CONCAT_WS(', ', first_name, middle_name, last_name)
即使
middle_name
NULL
,也会输出
'John, Doe'
IFNULL(col, '')
COALESCE(col, '')
:把
NULL
显式转为空字符串再传给
CONCAT
,例如
CONCAT(first_name, ' ', IFNULL(middle_name, ''), ' ', last_name)

推荐优先用

CONCAT_WS
,语义清晰、代码简洁,且天然规避
NULL
问题。

CONCAT 在 UPDATE 和 WHERE 中的典型误用

有人试图在

UPDATE
里用
CONCAT
拼接新值,却忘了字段本身可能是
NULL
,导致更新后变空:

UPDATE logs SET content = CONCAT(content, '[ERROR]') WHERE id = 123;

如果原

content
NULL
,那更新结果就是
NULL
,不是预期的
'[ERROR]'
。正确做法是:

IFNULL(content, '')
包裹
或改用
CONCAT_WS('', content, '[ERROR]')
(分隔符为空)
更安全的写法:
UPDATE logs SET content = CONCAT(IFNULL(content, ''), '[ERROR]') WHERE id = 123;

同理,在

WHERE
中拼接查询条件(如模糊匹配)时,也要检查字段是否可空,否则
LIKE CONCAT('%', col, '%')
可能因
col
NULL
而失效。

性能与字符集注意事项

CONCAT
本身开销极小,但要注意隐式字符集转换带来的潜在问题:

若拼接的字段/字面量使用不同字符集(如 utf8mb4 和 latin1),MySQL 会尝试转换,可能触发警告甚至报错
Illegal mix of collations
解决方案:统一用
CONVERT(... USING utf8mb4)
或在连接前显式声明字符集,例如
CONCAT(CONVERT(name USING utf8mb4), ' - ', CONVERT(id, CHAR))
对大字段(
TEXT
)频繁拼接并用于排序或索引字段时,可能影响执行计划,建议只在必要场景使用

真正容易被忽略的是字符集一致性——开发时本地库是 utf8mb4,上线后测试库用的是 latin1,

CONCAT
就可能悄无声息地出错,查起来很费时间。

相关推荐