我是服务器的新手,并试图再次将HEX转换为bigint和bigint到HEX。但是,我注意到MySQL和SQL服务器计算给出了不同的结果。
HEX到bigint
MySQL:
SELECT CONV('DA346CC793AD1510',16,10);输出:
15723311803489129744SQL :
SELECT CAST(CONVERT(VARBINARY(MAX), 'DA346CC793AD1510', 2) AS BIGINT); 输出:
-2723432270220421872为什么MySQL和servers服务器提供不同的输出?从数学的角度来看,它必须是一样的。
但是,在MySQL和servers服务器中,bigint到HEX的转换结果都是相同的。
MySQL:select conv(column_name,10,16);
SQL Express select FORMAT(column_name,'X');
在服务器中,将HEX转换为bigint,将bigint转换为HEX的正确方式是什么?我是不是遗漏了什么?
发布于 2020-05-13 14:40:16
“为什么MySQL和servers服务器提供不同的输出?从数学的角度来看,它必须是相同的。”
比格纳上限范围为2到电源63 - 1:
9,223,372,036,854,775,807 -- upper range of BIGINT
15,723,311,803,489,129,744 -- converted "DA346CC793AD1510" valueBIGINT无法存储这样的值,只会溢出:
9,223,372,036,854,775,807 -> (overflow) -> starting from the lowest value (-9,223,372,036,854,775,808) + (15,723,311,803,489,129,744 - 9,223,372,036,854,775,807) -> -2,723,432,270,220,421,872
https://stackoverflow.com/questions/61746221
复制相似问题