I wanted to make a true/false field for if an item is in stock.
I wanted to set it to Boolean ( which gets converted to tinyint(1)
), 1 for in stock, 0 for not in stock.
I am getting feeds from vendors, so I thought to myself, "What if they pass how many are instock?"
So I wondered if I inserted a number higher than 1 what would happen. I assumed it would default to 1.
To my surprise it will allow me to hold any number up to 127, anything over defaults to 127.
Can anyone explain why?
The
tinyint
data type utilizes 1 byte of storage. 256 possible integer values can be stored using 1 byte (-128 through 127). if you define astinyint unsigned
then negative values are discarded so is possible to store (0 through 255).MySQL will show the 0's in the start if zerofill is used while creating the table. If you didn't use the zerofill then it is not effective.
See here for how MySQL handles this. If you use MySQL > 5.0.5 you can use
BIT
as data type (in older versionsBIT
will be interpreted asTINYINT(1)
. However, the(1)
-part is just the display width, not the internal length.The signed
TINYINT
data type can store integer values between -128 and 127.However,
TINYINT(1)
does not change the minimum or maximum value it can store. It just says to display only one digit when values of that type are printed as output.