Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何在32位操作系统中存储BIGINT数字_Mysql_32 Bit_Bigint - Fatal编程技术网

Mysql 如何在32位操作系统中存储BIGINT数字

Mysql 如何在32位操作系统中存储BIGINT数字,mysql,32-bit,bigint,Mysql,32 Bit,Bigint,我在raspberry pi 3(64位SoC)上运行一个LAMP堆栈,带有32位像素操作系统(Raspbian版本)。 我在MySQL中创建了一个新表,并将主键设置为unsigned BIGINT(20)。起初我以为数据库只会截断溢出的数字或其他东西,但实际上它可以存储大于40亿的数字。更准确地说,我存储了5201702020这个数字。 这怎么可能呢?查看MySQL源代码,我发现至少有4个对BIGINT的引用: 1) “BIGINT”: que Retrona“PARS_BIGINT_T

我在raspberry pi 3(64位SoC)上运行一个LAMP堆栈,带有32位像素操作系统(Raspbian版本)。 我在MySQL中创建了一个新表,并将主键设置为unsigned BIGINT(20)。起初我以为数据库只会截断溢出的数字或其他东西,但实际上它可以存储大于40亿的数字。更准确地说,我存储了5201702020这个数字。
这怎么可能呢?

查看MySQL源代码,我发现至少有4个对BIGINT的引用:

1) “BIGINT”:

que Retrona“PARS_BIGINT_TOKEN”:

2) 作为结构:

3) 在许多地方,如int64\t或uint64\t

4) Java语言类型,在所有Java文件中

为了回答你的问题:

情况(1)和(2)将由源代码实现/逻辑处理

情况(3)将由编译器处理,而不是由操作系统处理。编译器将对BigInt变量和值进行所有必要的转换,以完成任务


这种情况(4)将由JVM来处理,而不是像编译器那样由操作系统来处理。

这是可能的,因为当一切都是32位的时候,人们说“嗯,我需要存储一个非常大的数字,所以我将构建它来处理它”。你肯定不会回想起20世纪80年代,没有人需要处理大量的数据吗?BIGINT存储在8个字节中。无论是32位还是64位系统。可能MySQL使用多个内存位置来存储数字。。。现在我想起来了,它如何存储长度超过4字节的字符串???