-1

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
    It's possible because back when everything was 32 bit people said "Huh, I need to store a really big number, so I'll build it to handle that". Surely you don't think back in the 1980s no one ever had to handle large numbers? http://superuser.com/questions/698312/if-32-bit-machines-can-only-handle-numbers-up-to-232-why-can-i-write-100000000 – ceejayoz Feb 03 '17 at 13:04
  • 1
    BIGINT is stored in 8 Bytes. No matter if 32bit or 64bit system. – Paul Spiegel Feb 03 '17 at 14:38
  • Maybe MySQL uses more than one memory location to store the number... Now that I think about it, how does it store strings longer than 4 bytes??? – Bohemian Feb 28 '17 at 03:23

1 Answers1

0

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

1) "BIGINT":

que retorna "PARS_BIGINT_TOKEN":

2) As a struct:

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.

Bhargav Rao
  • 50,140
  • 28
  • 121
  • 140
rmagalhaess
  • 373
  • 1
  • 2
  • 8