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

MySQL 字符串拼接報錯「Truncated incorrect DOUBLE value」根因與正確姿勢

     編輯:MySQL 資料庫相關知識

一、 問題復現

需將圖片 URL 字段 cover 追加尺寸後綴 |1200*675:

UPDATE tag_group SET cover = cover + '|1200*675' WHERE id = 1;

報錯:

Data truncation: Truncated incorrect DOUBLE value: 'https://qximg.lightplan.cc/...jpeg'

二、 根因分析

  • MySQL 中 + 僅為數值加法運算符,不支援字符串拼接
  • 執行時將字符串隱式轉換為 DOUBLE,非數值字符串轉換為 0,並產生截斷警告
  • CONCAT() 才是標準字符串拼接函數

三、 正確寫法

UPDATE tag_group
SET cover = CONCAT(cover, '|1200*675')
WHERE id = 1;

四、 CONCAT 進階用法

場景寫法說明
多字段拼接CONCAT(first_name, ' ', last_name)任意參數,任一為 NULL 結果為 NULL
忽略 NULLCONCAT_WS('|', col1, col2, col3)第一參為分隔符,自動跳過 NULL
拼接查詢結果SELECT CONCAT(id, ':', name) FROM users常用於生成顯示標識
GROUP_CONCAT 聚合拼接SELECT GROUP_CONCAT(name SEPARATOR ',') FROM users GROUP BY dept分組內行級拼接,長度受 group_concat_max_len 限制

五、 避坑提醒

  • || 運算符:MySQL 中 || 默認為邏輯 OR(同 OR),不是拼接。需開啟 sql_mode=PIPES_AS_CONCAT 才作拼接用,不建議依賴
  • NULL 傳染:CONCAT('a', NULL, 'c') → NULL,業務字段可能為 NULL 時用 COALESCE(col, '') 或 CONCAT_WS
  • 隱式轉換陷阱:SELECT '1' + '2' → 3(數值相加),SELECT '1' || '2' → 1(邏輯真),唯有 CONCAT('1','2') → '12'

六、 總結

MySQL 字符串拼接唯一標準函數是 CONCAT()/CONCAT_WS()。+ 僅做數學加法,|| 默認做邏輯或。遇到「Truncated incorrect DOUBLE value」警告,立即檢查是否誤用 + 拼接字符串。養成寫 CONCAT 肌肉記憶,杜絕此類低級錯誤。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved