我必须在一个项目中工作,我们在HEX中有一个标识符。
示例B900001752F10001
是在SIGNED LONG变量的 JAVA 中开发的解析器中收到的。我们将该变量存储在MySQL DB中的SIGNED BIGINT变量中。
每当我们需要HEX链时,我们都会使用HEX(代码)功能,我们得到了预期的结果。
但是当我们必须配置主表时,我们需要输入有效代码,以实现我们使用的类似:
Update employee set code=0xB900001752F10001 where main_employee_id=1002;
它在过去生产的代码中存储在DB中作为
13330654997192441857
但是现在我们正在使用相同的指令,我们将代码存储在DB中
-5116089076517109759
因此,使用HEX功能比较这两个数字,那些提供相同的HEX NUMBER。
select HEX(-5116089076517109759), HEX(13330654997192441857)
0xB900001752F10001, 0xB900001752F10001
有人可以提供为什么会这样吗?我们应该如何从供应角度处理这个问题,以确保存储为13330654997192441857
,以便在验证事件发生时代码匹配。
我没有任何其他想法,我感谢任何帮助。
答案 0 :(得分:2)
我认为你已经溢出了数据类型。
根据MySQL manual,签名的bigint在
范围内aws route53 get-change --id <value from previous cli>
到
-9,223,372,036,854,775,808
您的电话号码
9,223,372,036,854,775,807
已超过上述正值,因此溢出并且是 解释为负数。
说完了,我想你的命令可能仍然没问题 - 只有当你试图将十六进制模式解释为数字时,结果才会令人困惑。
18,446,744,073,709,551,615
答案 1 :(得分:0)
64bite机器,最高位是符号位,所以最大数字是9,223,372,036,854,775,807,但是如果你的数字多于它,则最高位将转换为1,因此num将为负数且溢出。 所以你的13330654997192441857将成为5116089076517109759。