Eu acho que você deveria armazenar isso como um pouco (se você se preocupa com o tamanho do armazenamento) e deixe NULL
significa "desconhecido".
field bit(1) default NULL,
Parece estranho declarar um campo para ser not null
e então ter um valor especial que, essencialmente, significa NULL
.
EDITAR:
A seguinte sintaxe "trabalha" em SQL Fiddle:
create table t (
val int,
flag tinyint(1) default -1
);
"Works" está em citações porque o valor padrão imprime como "1" em vez de "-1"-afinal, o (1)
está dizendo apenas imprimir um dígito.
Talvez em algumas versões anteriores do MySQL gerem um erro quando vê que -1
não será exibido corretamente. (Para ser sincero, isso me surpreenderia.)