How did I store a BIGINT number in a 32-bit OS

倾然丶 夕夏残阳落幕 提交于 2019-12-23 06:21:22

问题


I am running a LAMP stack on a raspberry pi 3 (64-bit SoC) with 32-bit PIXEL OS (a Raspbian version). I created a new table in MySQL and I set the Primary Key as unsigned BIGINT(20). Initially I thought that the database will just truncate the overflowing digits or something but it can actually store bigger numbers than ~4 billion. To be more precise I stored the number 5201702020. How is that possible?


回答1:


Looking in the MySQL source code, I found at least 4 references to BIGINT:

1) "BIGINT":

  • https://github.com/mysql/mysql-server/blob/5.7/storage/innobase/pars/pars0lex.l#L560

que retorna "PARS_BIGINT_TOKEN":

  • https://github.com/mysql/mysql-server/blob/5.7/storage/innobase/include/pars0grm.h#L247

2) As a struct:

  • https://github.com/mysql/mysql-server/blob/5.7/strings/dtoa.c#L627

3) As int64_t or uint64_t in many places

4) Java language type, in all java files.

And, to answer your question:

The situations (1) and (2) will be handled by source code implementation/logics.

The situation (3) will be handled by the compiler, not the OS. The compiler will make all the necessary transformations to BigInt variables and values to accomplish the job.

The situation (4) will be handled by JVM, not the OS, as the compiler does.



来源:https://stackoverflow.com/questions/42024963/how-did-i-store-a-bigint-number-in-a-32-bit-os

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!