任何人都有任何想法为什么以下产生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为负.
无符号值必须为零或更多 - 因此-1超出范围.不要使用unsigned吗?
从数据类型 docs:
BIGINT[(M)] [UNSIGNED] [ZEROFILL]一个大整数.签署的范围是
-9223372036854775808到9223372036854775807.无符号的范围是0到18446744073709551615.
或者在混合符号上下文中使用它时将每个值转换为signed,这样的事情可能是:
IF(trades.`buyer` = 63, -1, 1) * CAST(trades.`price` AS SIGNED) * CAST(trades.`amount` AS SIGNED)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5486 次 |
| 最近记录: |