No manual do MySQL, diz:
BOOL, BOOLEAN
Esses tipos são sinônimos de TINYINT(1). Um valor de 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 realizar a atualização.
Se BOOLEAN funciona exatamente da mesma forma que TINYINT(1), faz alguma diferença se eu uso TINYINT(1) ou BOOLEAN?
Esses dois são realmente sinônimos, então você pode usá-los de forma intercambiável. Você não verá nenhuma diferença entre eles.
Se você quiser permitir apenas 0 e 1, ainda poderá usar o
bit
tipo.Se você estiver trabalhando com outras pessoas (ou quiser se lembrar), pode usar o tipo de dados
BOOLEAN
para sugerir que os dados devem apenas assumir um valor de 1 ou 0.Parece-me que há realmente uma diferença.
Em uma tabela que estou usando, tenho uma coluna definida como tinyint com um índice na coluna. Quando invoco a seguinte consulta "explain select * from table where column is true" ela indica que vai ler todas as linhas da tabela (as colunas "possible_keys" e "ref" são nulas apesar da coluna "key" mostrar o índice).
Alterando a consulta para "explain select * from table where column = 1", o índice é ativado corretamente, com as colunas "possible keys" e "ref" sendo atribuídas valores e "rows" definidas para um número muito menor.
Também tentei substituir o "true" por "false" e o 1 por 0 e obtive resultados comparáveis.
Dando um passo adiante, mudei de um tinyint para um int e não fez diferença.