Dado que os campos de bits são apenas representações binárias de dados e precisam ser consultados de maneira um pouco "estranha".
Ele realmente fornece algum benefício usando um campo de bits para um valor booleano? Pelo que posso ver, parece sugerir que o espaço é o único benefício real.
Pessoalmente, eu usaria o
BOOLEAN
para um valor booleano. Mas lembre-se da ressalva de que no MySQLBOOLEAN
é apenas um sinônimo deTINYINT(1)
[src] .Isso, é claro, significa que você pode ter valores diferentes de 0 ou 1 se não for cuidadoso. Para evitar isso, você pode usar os aliases
TRUE
eFALSE
ao inserir e atualizar dados, como esses mapeiam para 1 e 0 respectivamente.Para ser completo, antes de 5.0.3,
BIT
também era sinônimo deTINYINT(1)
.Se entendi corretamente, BOOLEAN sempre usa 1 byte por coluna, mas BIT(n) usará poucos bytes necessários para manter o número de bits fornecido.
Portanto, o BIT pode economizar algum espaço, mas o BOOLEAN é mais fácil de trabalhar se você precisar consultá-los com SQL.
Se eu tivesse um conjunto de sinalizadores que fossem entendidos por um aplicativo e armazenados em um único campo no aplicativo, eu estaria procurando usar BIT(n). No entanto, se eu tivesse colunas que precisassem ser consultadas no SQL, eu estaria usando BOOLEAN.
Um exemplo seria um aplicativo que usa sinalizadores para registrar em quais semanas um evento deve ser executado, com um bit por semana, sendo 1 se o evento for executado em determinada semana. Se os dados fossem fáceis de consultar em um banco de dados, eles seriam “normalizados” em duas tabelas, mas se os dados apenas precisassem ser armazenados no banco de dados, então é melhor mantê-los na forma que o aplicativo os usa dentro.