批量更新时,decimal类型,生成sql语句在mysql中执行会存在精度丢失 返回
雨..... 发布于2026/6/22
UPDATE `pl_product_mer_price` S INNER JOIN (
SELECT N'08dd7be75ac7456a8d7d33f4a0d765d9_80000027_100002218' AS `id`,1998 AS `price`,0 AS `is_loss`,0 AS `loss_type`,'2026-06-22 16:53:11.000' AS `update_time`,N'孙凯' AS `update_name`,N'd6c0c2a1-1175-4ceb-8c86-9a4d0d1e8c5a' AS `update_user_id`
UNION ALL
SELECT N'08dd7be75ac7456a8d7d33f4a0d765d9_80000027_100002105' AS `id`,0.999 AS `price`,1 AS `is_loss`,1 AS `loss_type`,'2026-06-22 14:50:31.000' AS `update_time`,N'章杰' AS `update_name`,N'19fcd43f-771d-49c7-9d7b-a11d310d89f3' AS `update_user_id`
) T ON S.`id`=T.`id`
SET S.`price`=T.`price`,S.`is_loss`=T.`is_loss`,S.`loss_type`=T.`loss_type`,S.`update_time`=T.`update_time`,S.`update_name`=T.`update_name`,S.`update_user_id`=T.`update_user_id` ;
如上例子,1998在执行语句后变成了999.999,
AI分析结果:
MySQL 必须为 UNION 所有分支的 price 列推断出统一类型:
0.999 有 3 位小数 → MySQL 推断为 DECIMAL(4,3) 或 DECIMAL(5,3)
如果 MySQL 再与目标列 pl_product_mer_price.price(很可能是 DECIMAL(5,2))做类型协调,派生列可能被收窄为 DECIMAL(5,2)
DECIMAL(5,2) 的最大值 = 999.99
1998 赋值到这个派生列时 → 被静默截断为 999.99(非严格模式下)
MySQL 必须为 UNION 所有分支的 price 列推断出统一类型:
0.999 有 3 位小数 → MySQL 推断为 DECIMAL(4,3) 或 DECIMAL(5,3)
如果 MySQL 再与目标列 pl_product_mer_price.price(很可能是 DECIMAL(5,2))做类型协调,派生列可能被收窄为 DECIMAL(5,2)
DECIMAL(5,2) 的最大值 = 999.99
1998 赋值到这个派生列时 → 被静默截断为 999.99(非严格模式下)
热忱回答(1)
-
fate sta VIP0
2026/6/23用.UseParameter()更新
0 回复