Mysql与sql express server(HEX ->bigint和bigint ->HEX转换)。

问题描述 投票:1回答:1

我是SQL express server的新手,想把HEX转换成bigint,再把bigint转换成HEX。但是,我发现MySQL和SQL express server的计算结果不一样。

HEX转bigint:

MySQL。

SELECT CONV('DA346CC793AD1510',16,10);

输出。

15723311803489129744

SQL Express :

SELECT CAST(CONVERT(VARBINARY(MAX), 'DA346CC793AD1510', 2) AS BIGINT); 

输出。

-2723432270220421872

为什么MySQL和SQL express服务器的输出不同?从数学的角度来看,肯定是一样的,但在MySQL和SQL express服务器中,bigint到HEX的转换结果是一样的。

然而,在MySQL和SQL express服务器中,bigint到HEX的转换给出了相同的结果。

在MySQL中: select conv(column_name,10,16);

SQL Express select FORMAT(column_name,'X');

在SQL express server中,将HEX转为bigint和bigint转为HEX的正确方法是什么?我是不是遗漏了什么?

mysql sql-server hex sql-server-express bigint
1个回答
1
投票

"为什么MySQL和SQL express服务器给出的输出结果不一样?从数学的角度来看,肯定是一样的。"

BIGINT 上限范围是2到63的幂 - 1。

 9,223,372,036,854,775,807   -- upper range of BIGINT
15,723,311,803,489,129,744   -- converted "DA346CC793AD1510" value

BIGINT不能存储这样的值,只能溢出。

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

© www.soinside.com 2019 - 2024. All rights reserved.