C++ unsigned long long range vs [=s10=] unsigned bigint range

c++ usigned long long range vs mysql unsigned bigint range

我有一个 MySQL UDF returns unsigned long long 值。当我在 MySQL 中调用此函数并且数据已保存在数据库中时,MySQL returns 警告:
BIGINT UNSIGNED 值超出范围”。
如何在数据库中保存大的 unsigned long long 数字?

MySQL版本:5.5.43
OS : Ubuntu 14.04

请帮忙。

假设您的 unsigned long long 数据类型是 64 位,它应该非常适合 MySQL BIGINT UNSIGNED 类型,它也是 64 位。

我建议检查宏 ULONG_MAX 的 C 实现 limits.h(或 climits for C++)文件以确保它 只有 64 位。


但是您应该知道,您可以对无符号值执行某些操作,这些操作也会给您带来此错误。如果您只是简单地存储从 UDF 中编辑的确切值 return,那么它可能不适用,但是,如果您正在做类似的事情:

select my_udf() - 22 from somewhere

my_udf() returns 15(例如),您会看到该错误消息,因为 -7 不能用无符号类型表示。

如果是这样,解决方案 可能 就像将 return 值转换为有符号类型一样简单,但我们需要更多信息来了解它是什么能否return给个正确的建议。