one incompatibility is that it is not
portable
some database systems do not support a BIT datatype, but they all support CHAR
in other words, if you build a database using BIT, and then you wish to move it to some other system, you may have to change BIT anyway
CHAR(1) and TINYINT are the two datatypes most often used
another benefit of CHAR(1) and TINYINT is
flexibility and this is illustrated by the following scenario
imagine we have a BIT column called MaritalStatus, with values 0 and 1 meaning Single and Married
actually, we wouldn't, because that would be misusing the BIT datatype, which is really supposed to be used like a switch -- on/off, yes/no, 0/1
so we would have to name our BIT column IsMarried
now, would we also have another column called IsSingle? probably not, but you can imagine the programming code either way...
Code:
IF IsMarried <> 0 ...
IF IsSingle IS NOT TRUE ...
IF NOT IsMarried ...
IF IsSingle < 1 ...
IF IsMarried = 1 ...
and then one day, we are told to change our application to incorporate divorced as a valid marital status
if we had started out with TINYINT values of 0 and 1, we could simply add 2
would any of the code need to be changed? yes, if when we wrote the code we pretended that there would never ever forever never be more than two values