MySQL BIGINT UNSINGED值为out或range,乘以(-1)

ikr*_*omm 4 mysql

可能重复:
BIGINT自MySQL 5.5以来的超出范围错误

任何人都有任何想法为什么以下产生1690错误:BIGINT UNSIGNED值是out还是范围?

SELECT CAST(IF(trades.`buyer` = 63, -1, 1)  * trades.`price` * trades.`amount` AS SIGNED) AS priceTotal 
FROM trades
WHERE (trades.`buyer` = 63 OR trades.`seller`= 63);
Run Code Online (Sandbox Code Playgroud)

我想要做的是当用户是买家时使priceTotal为负.

mar*_*ton 6

无符号值必须为零或更多 - 因此-1超出范围.不要使用unsigned吗?

数据类型 docs:

BIGINT[(M)] [UNSIGNED] [ZEROFILL]

一个大整数.签署的范围是-92233720368547758089223372036854775807.无符号的范围是018446744073709551615.

或者在混合符号上下文中使用它时将每个值转换为signed,这样的事情可能是:

IF(trades.`buyer` = 63, -1, 1) * CAST(trades.`price` AS SIGNED) * CAST(trades.`amount` AS SIGNED)
Run Code Online (Sandbox Code Playgroud)