SQL: best way to store yes/no values? Looking after performance in huge databases
Semantically, I suggest you use bit
if it's available to you. When looking at the column, any other developer can immediately determine that a boolean value is stored in it. If you don't have bit
, try using tinyint
. Ensuring that 1
is the only true
value and 0
is the only false
value will bring consistency. Otherwise, you could end up with a messy mixture of true
/false
, yes
/no
, valid
/invalid
, y
/n
, and/or t
/f
.
Comparing bit
or tinyint
values probably isn't slower than comparing strings, and even if it were slower than comparing strings, I can't imagine it having a significant effect on overall speed.
Is there something you don't like about the 'bit' data type?
The most commonly supported means is to use CHAR(1)
- on most databases, it takes the same amount of space as BIT (assuming BIT is available, 1 byte) but supports more values (26 if case insensitive, 52 if not) if there's any chance of supporting more values. Unlike BIT
, CHAR(1)
is human readable. Also, BIT
isn't supported on every database.