MySQL BIGINT UNSIGNED 值在与 (-1) 相乘时超出范围

标签 mysql

<分区>

Possible Duplicate:
BIGINT Out-of-range Error since MySQL 5.5

任何人都知道为什么以下会产生 1690 错误:BIGINT UNSIGNED value is out or range?

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);

我想做的是当用户是买家时使 priceTotal 为负数。

最佳答案

无符号值必须为零或更多 - 所以 -1 超出范围。也许不要使用未签名?

来自data type文档:

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

A large integer. The signed range is -9223372036854775808 to 9223372036854775807. The unsigned range is 0 to 18446744073709551615.

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

IF(trades.`buyer` = 63, -1, 1) * CAST(trades.`price` AS SIGNED) * CAST(trades.`amount` AS SIGNED)

关于MySQL BIGINT UNSIGNED 值在与 (-1) 相乘时超出范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8104838/

相关文章:

MYSQL 多个 INNER JOIN 检索每条信息

mysql - 覆盖sql表结构

mysql - 如何在加入和辞职日期内获取员工列表,包括laravel mysql中的空日期

经常更新的mysql索引时间戳列

MySQL 更新十进制类型的十进制值,因此所有值都以 .95 结尾

php - 如何从两个不同的表中获取数据?

mysql - 如何计算mysql的24小时时间?

php - 伪随机字节的存储

mysql - PHP安全地存储cookie数据并与mysql条目进行比较?

c# - MySQL : 6. 6.5.0 版本的 MySql.Data 无法加载