No manual do MySQL, ele diz:
BOOL, BOOLEAN
Esses tipos são sinônimos para TINYINT (1). Um valor zero é considerado falso. Valores diferentes de zero são considerados verdadeiros:
Criei uma coluna BOOLEAN com 0
o valor padrão. Então eu atualizo o valor para 2
. Logicamente, eu esperaria que o MySQL aceitasse 0
ou 1
porque é um booleano. No entanto, o MySQL não emitiu um erro ou me impediu de executar a atualização.
Se o BOOLEAN funciona exatamente da mesma forma que o TINYINT (1), faz alguma diferença usar o TINYINT (1) ou o BOOLEAN?
BIT
é realmente um campo de bits que comporta um a sessenta e quatro bits de forma compacta.Se você estiver trabalhando com outras pessoas (ou quiser se lembrar), poderá usar o tipo de dados
BOOLEAN
para sugerir que os dados se destinam apenas a assumir um valor de 1 ou 0.fonte
Parece-me que há realmente uma diferença.
Em uma tabela que estou usando, tenho uma coluna definida como um tinyint com um índice na coluna. Quando invoco a consulta a seguir "explicar seleção * da tabela onde a coluna é verdadeira", isso indica que ela lerá todas as linhas da tabela (as colunas "possible_keys" e "ref" serão nulas, apesar da coluna "key" mostrar o índice).
Alterando a consulta para "explicar seleção * da tabela em que coluna = 1", o índice entra em ação corretamente, com as colunas "chaves possíveis" e "ref" sendo atribuídas valores e "linhas" configuradas para um número muito menor.
Eu também tentei substituir o "verdadeiro" por "falso" e o 1 por um 0 e obtive resultados comparáveis.
Indo um passo adiante, mudei de um tinyint para um int e não fez diferença.
fonte