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

时间:2015-06-08 07:03:10

标签: c++ mysql bigint unsigned-long-long-int udf

我有一个MySQL UDF,它返回 unsigned long long 值。当我在MySQL中调用此函数并且数据已保存在数据库中时,MySQL会返回警告:
 " BIGINT UNSIGNED值超出范围"。
如何在数据库中保存大的无符号长号?

MySQL版本: 5.5.43
操作系统: Ubuntu 14.04

请帮忙。

1 个答案:

答案 0 :(得分:1)

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

我建议检查宏limits.h的C实现climits(或ULONG_MAX for C ++)文件,以确保 仅为64位。< / p>

但是您应该知道,您可以对无符号值执行某些操作,这些操作也会给您带来此错误。如果您只是简单地存储从UDF返回的确切值,则可能不适用,但如果您正在执行以下操作:

select my_udf() - 22 from somewhere

my_udf()返回15(例如),您会看到该错误消息,因为-7无法以无符号类型表示。

如果是这种情况,解决方案可能就像将返回值转换为签名类型一样简单,但是我们需要更多关于它可以返回正确建议的信息。