I have a MySQL column specified as:
`type` TINYINT(1) NOT NULL DEFAULT \'0\'
The intent of the column is to store an integer value not to e
One solution I've found is to simply change the column type to UNSIGNED
:
`type` tinyint(1) unsigned NOT NULL DEFAULT '0'
This has the following effect:
var Temp = Reader["type"].GetType(); // equals "Byte"
Which does retrieve the proper result (2) upon calling .GetInt32().
However if for some reason you wanted to store values from -127 to 127 (using it as a signed TINYINT) this solution doesn't work.
Another solution is to change the column type to TINYINT(2):
`type` tinyint(2) NOT NULL DEFAULT '0'
This gives:
var Temp = Reader["type"].GetType(); // equals "SByte"
Also yielding the proper result (2).
However this brings into question the purpose of the number after TINYINT (i.e. TINYINT(#)
). Isn't it for "optionally specifying the display width"? Maybe someone can shed more light on this point.
Put that in your connection string to use tinyint as number
TreatTinyAsBoolean=false
The answer for the Connector's confusion may be this part from MySQL docs; Numeric Types:
As of MySQL 5.0.3, a
BIT
data type is available for storing bit-field values. (Before 5.0.3, MySQL interpretsBIT
asTINYINT(1)
.) ...
or (even more probable) this part from Numeric Type Overview:
BOOL, BOOLEAN
These types are synonyms for
TINYINT(1)
. A value of zero is considered false. Nonzero values are considered true ...