I’m designing a new system to store short text messages [sic].
I’m going to identify each message by a unique identifier in the database, and use an AUTO_INCREMENT column to generate these identifiers.
Conventional wisdom says that it’s okay to start with 0 and number my messages from there, but I’m concerned about the longevity of my service. If I make an external API, and make it to 2^31 messages, some people who use the API may have improperly stored my identifier in a signed 32-bit integer. At this point, they would overflow or crash or something horrible would happen. I’d like to avoid this kind of foo-pocalypse if possible.
Should I “UPDATE message SET id=2^32+1;” before I launch my service, forcing everyone to store my identifiers as signed 64-bit numbers from the start?
If you wanted to achieve your goal and avoid the problems that cletus mentioned, the solution is to set your starting value to 2^32+1. There’s still plenty of IDs to go and it won’t fit in a 32 bit value, signed or otherwise.
Of course, documenting the value’s range and providing guidance to your API or data customers is the only right solution. Someone’s always going to try and stick a long into a char and wonder why it doesn’t work (always)