首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 字符串拼接:CONCAT 函數詳解與 NULL 陷阱

     編輯:MySQL 資料庫相關知識

語法與基本用法


CONCAT(str1, str2, ...)
-- 返回拼接後字符串
-- 任一參數為 NULL → 返回 NULL
-- 全非二進制串 → 結果非二進制
-- 含二進制串 → 結果二進制
-- 數值隱式轉二進制串 → 建議 CAST(x AS CHAR)

實戰範例


SELECT CONCAT('10');              -- '10'
SELECT CONCAT('11','22','33');    -- '112233'
SELECT CONCAT('11','22',NULL);    -- NULL  ← 核心陷阱

NULL 安全拼接方案

方案語法示例結果適用版本
CONCAT_WSCONCAT_WS(sep, str1, str2...)CONCAT_WS(',', 'a', NULL, 'c') → 'a,c'所有版本
IFNULL/COALESCECONCAT(IFNULL(a,''), IFNULL(b,''))手動轉空串所有版本
CONCAT + NULLIF罕用--

推薦:CONCAT_WS(With Separator)


-- 拼接姓名
SELECT CONCAT_WS(' ', first_name, middle_name, last_name) FROM users;
-- 中間名為 NULL 時不會產生雙空格

-- 拼接地址
SELECT CONCAT_WS(', ', province, city, district, address) FROM addr;

數值拼接隱式轉換


SELECT CONCAT(123, 'abc');        -- '123abc' (數值→二進制串)
SELECT CONCAT(CAST(123 AS CHAR), 'abc');  -- 顯式轉換,更安全

GROUP_CONCAT:聚合拼接


SELECT GROUP_CONCAT(name ORDER BY id SEPARATOR ',') FROM users;
-- 可配合 GROUP BY 分組拼接
-- 受 group_concat_max_len 限制(默認 1024),大數據需調大

性能提示

  • 大量拼接考慮應用層組裝,減少 SQL CPU
  • CONCAT 在 WHERE/JOIN ON 中導致索引失效
  • 導出 CSV 時用 SELECT ... INTO OUTFILE 配合 FIELDS TERMINATED BY 更高效
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved