Em quais casos você usaria qual? Tem muita diferença? O que eu normalmente uso por mecanismos de persistência para armazenar booleanos?
106
Um TINYINT é um valor inteiro de 8 bits, um campo BIT pode armazenar entre 1 bit, BIT (1), e 64 bits, BIT (64). Para valores booleanos, BIT (1) é bastante comum.
Da visão geral dos tipos numéricos ;
BIT [(M)]
TINYINT [(M)] [UNSIGNED] [ZEROFILL]
Além disso, considere isso;
BOOL, BOOLEAN
fonte
boolean
levará um byte mesmo que seja apenas um pouco, então um BIT (1) é melhor após a v5.0.3?BOOL
/BOOLEAN
sejam apelidos para emTINYINT(1)
vez deBIT
. Claro, todos eles acabam ocupando um byte inteiro, mas semanticamenteBIT
seria muito mais apropriado.Todas essas discussões teóricas são ótimas, mas na realidade, pelo menos se você estiver usando MySQL e realmente para SQLServer também, é melhor ficar com dados não binários para seus booleanos pela simples razão de que é mais fácil trabalhar quando você está enviando os dados, consultando e assim por diante. É especialmente importante se você está tentando obter interoperabilidade entre MySQL e SQLServer (ou seja, você sincroniza dados entre os dois), porque o tratamento do tipo de dados BIT é diferente nos dois. ASSIM, na prática, você terá muito menos aborrecimentos se usar um tipo de dados numérico. Eu recomendaria que o MySQL ficasse com BOOL ou BOOLEAN, que é armazenado como TINYINT (1). Mesmo a forma como o MySQL Workbench e o MySQL Administrator exibem o tipo de dados BIT não é agradável (é um pequeno símbolo para dados binários).
fonte
O BIT deve permitir apenas 0 e 1 (e NULL, se o campo não for definido como NOT NULL). TINYINT (1) permite qualquer valor que pode ser armazenado em um único byte, -128..127 ou 0..255 dependendo se é ou não sem sinal (o 1 mostra que você pretende usar apenas um único dígito, mas ele usa não impede que você armazene um valor maior).
Para versões anteriores a 5.0.3, BIT é interpretado como TINYINT (1), então não há diferença aqui.
O BIT tem uma semântica "isto é um booleano" e alguns aplicativos consideram o TINYINT (1) da mesma maneira (devido à forma como o MySQL o tratava), então os aplicativos podem formatar a coluna como uma caixa de seleção se marcarem o tipo e decidir sobre um formato com base nisso.
fonte
Pode estar errado, mas:
Tinyint é um número inteiro entre 0 e 255
bit é 1 ou 0
Portanto, para mim bit é a escolha dos booleanos
fonte
Pela minha experiência, estou dizendo que o BIT tem problemas em tipos de sistemas operacionais Linux (Ubuntu por ex). Desenvolvi meu db em windows e depois de implantar tudo no linux, tive problemas com queries que inseria ou selecionava de tabelas que tinham BIT DATA TYPE.
O bit não é seguro por enquanto. Mudei para tinyint (1) e funcionou perfeitamente. Quero dizer que você só precisa de um valor para diferenciar se é 1 ou 0 e tinyint (1) está ok para isso
fonte