I use int(255) in mysql as my id. Is this long enough? If I got about 1,000,000 records....Thank you.
-2147483648 to 2147483647 as per the docs for a signed 32 bit integer value
The 255 is simply display width and doesn't affect the range of values
The INT
in mysql
use 4 byte storage, and range from -2147483648 to 2147483647. If you use unsigned int, the range is 0 to 4294967295.
See this blog.
SELECT ~0 as max_bigint_unsigned
, ~0 >> 32 AS max_int_unsigned
, ~0 >> 40 AS max_mediumint_unsigned
, ~0 >> 48 AS max_smallint_unsigned
, ~0 >> 56 AS max_tinyint_unsigned
, ~0 >> 1 AS max_bigint_signed
, ~0 >> 33 AS max_int_signed
, ~0 >> 41 AS max_mediumint_signed
, ~0 >> 49 AS max_smallint_signed
, ~0 >> 57 AS max_tinyint_signed
\G
*************************** 1. row ***************************
max_bigint_unsigned: 18446744073709551615
max_int_unsigned: 4294967295
max_mediumint_unsigned: 16777215
max_smallint_unsigned: 65535
max_tinyint_unsigned: 255
max_bigint_signed: 9223372036854775807
max_int_signed: 2147483647
max_mediumint_signed: 8388607
max_smallint_signed: 32767
max_tinyint_signed: 127
1 row in set (0.00 sec)
Something is probably just converting that to int(11)
for you. Since you can't have 255 visible digits in an int
, the maximum value will be 2147483647
.
If you need more than that you can set it to be unsigned, since I'm assuming you have no negative ids and then you can have up to 4294967295
.
If you are ever going to have more than 4 billion records (very unlikely if you're at 1 million right now), then you could use a bigint
instead, which allows you to store numbers up to 18446744073709551615
at a cost of more storage space of course.
If unisgned, from 0 to 4 294 967 295, so that is more than eough.
More info in mysql docs.