Eu estava projetando um banco de dados para um site onde preciso usar um tipo de dados booleano para armazenar apenas 2 estados, verdadeiro ou falso. Estou usando o MySQL.
Ao projetar o banco de dados usando phpMyAdmin, descobri que tenho os tipos de dados BOOLEAN e TINYINT.
Eu li artigos diferentes, alguns disseram que TINYINT é igual ao BOOLEAN, sem diferença. Alguns dizem que o BOOLEAN é convertido em TINYINT no MySQL.
MINHA pergunta é, se ambos são iguais, por que existem dois? Deve haver apenas um deles.
Aqui está a referência aos artigos que li:
http://www.careerride.com/MySQL-BOOL-TINYINT-BIT.aspx
http://dev.mysql.com/doc/refman/5.5/en/numeric-type -overview.html
BIT(1)
ouBIT(17)
ou mesmoBIT(64)
Apenas uma nota para os desenvolvedores de php (não tenho os pontos stackoverflow necessários para postar isso como um comentário) ... a conversão de automagic (e silent) para TINYINT significa que php recupera um valor de uma coluna "BOOLEAN" como um "0" ou "1", não é o esperado (por mim) verdadeiro / falso.
Um desenvolvedor que está olhando para o SQL usado para criar uma tabela e vê algo como: "some_boolean BOOLEAN NOT NULL DEFAULT FALSE," pode razoavelmente esperar ver resultados verdadeiro / falso quando uma linha contendo aquela coluna é recuperada. Em vez disso (pelo menos na minha versão do PHP), o resultado será "0" ou "1" (sim, uma string "0" ou uma string "1", não um int 0/1, obrigado php).
É uma nit, mas o suficiente para fazer com que os testes de unidade falhem.
fonte
As versões mais recentes do MySQL possuem o novo
BIT
tipo de dados em que você pode especificar o número de bits no campo, por exemploBIT(1)
para usar comoBoolean
tipo, porque pode ser apenas0
ou1
.fonte
A partir da referência da versão MySql 5.1
========================================================== =========================
https://dev.mysql.com/doc/refman/5.7/en/storage-requirements.html#data-types-storage-reqs-numeric
fonte
A visão geral dos tipos numéricos para estados do MySQL: BOOL, BOOLEAN: esses tipos são sinônimos para TINYINT (1). Um valor zero é considerado falso. Valores diferentes de zero são considerados verdadeiros.
Veja aqui: https://dev.mysql.com/doc/refman/5.7/en/numeric-type-overview.html
fonte