How to retrieve an int value rather than a boolean from a TINYINT(1) column?

前端 未结 3 1243
难免孤独
难免孤独 2020-12-17 02:06

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

相关标签:
3条回答
  • 2020-12-17 02:24

    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.

    0 讨论(0)
  • 2020-12-17 02:34

    Put that in your connection string to use tinyint as number

    TreatTinyAsBoolean=false

    0 讨论(0)
  • 2020-12-17 02:45

    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 interprets BIT as TINYINT(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 ...

    0 讨论(0)
提交回复
热议问题