Qual é a vantagem de usar o BOOLEAN sobre o TINYINT (1)?

16

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 0o valor padrão. Então eu atualizo o valor para 2. Logicamente, eu esperaria que o MySQL aceitasse 0ou 1porque é 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?

Pergunta Overflow
fonte

Respostas:

11

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ê deseja permitir apenas 0 e 1, ainda pode usar o bittipo.

dezso
fonte
1
@QuestionOverflow Lembre-se de que BITé realmente um campo de bits que comporta um a sessenta e quatro bits de forma compacta.
David Harkness
2

Se você estiver trabalhando com outras pessoas (ou quiser se lembrar), poderá usar o tipo de dados BOOLEANpara sugerir que os dados se destinam apenas a assumir um valor de 1 ou 0.

Cato Minor
fonte
0

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.

user77843
fonte