You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL更新重量字段统一格式时DOUBLE值截断报错如何解决

报错原因

该报错是MySQL严格SQL模式导致的执行差异:

  • 执行SELECT查询时,weight + 0触发隐式类型转换,字符串开头的数字会被转为DOUBLE类型,后续非数字字符被截断,这个过程仅会生成警告,不会终止语句执行,所以可以拿到正常的查询结果。
  • 执行UPDATE写入操作时,默认开启的STRICT_TRANS_TABLES模式会将类型转换阶段的截断警告升级为错误直接抛出,你收到的Truncated incorrect DOUBLE value: '200 г'就是该规则的触发结果。
正确批量更新方案

推荐使用更稳妥的数字提取逻辑实现格式统一,不需要修改SQL配置,兼容所有常见MySQL版本:

UPDATE t 
SET weight = CONCAT(CAST(weight AS UNSIGNED), ' г');

如果是MySQL 8.0及以上版本,也可以用正则明确提取前缀数字,逻辑可读性更强:

UPDATE t 
SET weight = CONCAT(REGEXP_SUBSTR(weight, '^\\d+'), ' г');

如果坚持要使用原有隐式转换逻辑,可以临时修改当前会话的SQL模式关闭严格校验,执行完更新后可自行恢复原有配置:

-- 临时关闭当前会话的严格事务表模式
SET SESSION sql_mode = REPLACE(@@sql_mode, 'STRICT_TRANS_TABLES', '');
-- 执行原有更新语句
UPDATE t SET weight = CONCAT((weight + 0), ' г');

内容的提问来源于stack exchange,提问作者Slava Rozhnev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 21:06:03