I need MySQL to store numbers in a integer field and maintain leading zeros. I cannot use the zerofill option as my current field is Bigint(16) and numbers can vary in amount of leading zeros. IE: 0001 - 0005, then 008 - 010 may need to be stored. I am not concerned about uniqueness of numbers (these aren't being used as IDs or anything) but I still need them to be stored preferably as INTS.
The issue using CHAR/VARCHAR and then typecasting the values as integers in PHP means that sorting results via queries leads to alphanumeric sorting, IE: SORT BY number ASC would produce
001
002
003
1
100
101
102
2
Clearly not in numerical order, but in alphanumeric order, which isn't wanted.
Hoping for some clever workarounds :)
You can not store integer with leading zeroes. One way is keeping it in varchar as well as int columns. In this case, you need two columns, one value and the other intValue and while sorting, you can use the intValue for sorting. This is easy to implement.
The other option can be using two columns, one valu and othe NumOfZero and use these for the desired results. This is complex, but might be light on the DB.
Keep the numbers stored as integers.
Then use function
LPAD()
to show the numbers (left) padded with zeros:If the number of zerofill characters is variable, add another column in the table with that (zerofill) length.
You can still sort the string(CHAR/VARCHAR) columns like integer using CAST
So, you can store them in CHAR/ VARCHAR type fields.
Change the structure of the field and make the Attributes
UNSIGNED_ZEROFILL
to keep the zeros.But you should be careful to the Length of the field, because it's gonna return all the rest numbers to zeros so put the length of your field