Respostas:
Esses tipos de dados são sinônimos.
Vou adotar uma abordagem diferente aqui e sugerir que é tão importante para seus colegas desenvolvedores entender seu código quanto o compilador / banco de dados. Usar booleano pode fazer o mesmo que usar tinyint, no entanto, tem a vantagem de transmitir semanticamente qual é a sua intenção e isso vale alguma coisa.
Se você usar um tinyint, não é óbvio que os únicos valores que você deve ver são 0 e 1. Um booleano SEMPRE é verdadeiro ou falso.
boolean
não é um tipo de dados distinto no MySQL; é apenas um sinônimo para tinyint
. Veja esta página no manual do MySQL .
Pessoalmente, eu sugiro usar tinyint como preferência, porque booleano não faz o que você acha que faz com o nome, por isso cria um código potencialmente enganoso. Mas, no nível prático, isso realmente não importa - os dois fazem a mesma coisa, então você não está ganhando ou perdendo nada usando os dois.
use enum é o mais fácil e rápido
não recomendarei enum ou tinyint (1), pois o bit (1) precisa de apenas 1 bit para armazenar o valor booleano, enquanto o tinyint (1) precisa de 8 bits.
ref
BIT(M) - approximately (M+7)/8 bytes
ver: dev.mysql.com/doc/refman/8.0/en/storage-requirements.html
Embora seja verdade que bool
e tinyint(1)
sejam funcionalmente idênticos, bool
deve ser a opção preferida, pois carrega o significado semântico do que você está tentando fazer. Além disso, muitos ORMs serão convertidos bool
no tipo booleano nativo da sua linguagem de programação.
Minha experiência ao usar o Dapper para conectar-se ao MySQL é que isso importa . Alterei um bit não anulável (1) para um tinyint (1) anulável usando o seguinte script:
ALTER TABLE TableName MODIFY Setting BOOLEAN null;
Então Dapper começou a lançar exceções. Eu tentei olhar para a diferença antes e depois do script. E percebeu que o bit (1) havia mudado para tinyint (1).
Eu então corri:
ALTER TABLE TableName CHANGE COLUMN Setting Setting BIT(1) NULL DEFAULT NULL;
O que resolveu o problema.
boolean
comotinyint(1)
. Assim você pode usarboolean
,true
efalse
MySQL e os trata comotinyint(1)
,1
e0
.