Risposte:
Questi tipi di dati sono sinonimi.
Qui adotterò un approccio diverso e suggerirò che è altrettanto importante che i tuoi colleghi sviluppatori comprendano il tuo codice quanto lo è per il compilatore / database. L'uso di booleano può fare la stessa cosa dell'uso di tinyint, tuttavia ha il vantaggio di trasmettere semanticamente qual è la tua intenzione, e questo vale qualcosa.
Se usi un tinyint, non è ovvio che gli unici valori che dovresti vedere sono 0 e 1. Un booleano è SEMPRE vero o falso.
boolean
non è un tipo di dati distinto in MySQL; è solo un sinonimo di tinyint
. Vedi questa pagina nel manuale MySQL .
Personalmente suggerirei di usare tinyint come preferenza, perché booleano non fa quello che pensi che faccia dal nome, quindi crea codice potenzialmente fuorviante. Ma a livello pratico, non importa: entrambi fanno la stessa cosa, quindi non stai guadagnando o perdendo nulla usando nessuno dei due.
usa enum è il più facile e veloce
Non consiglierò enum o tinyint (1) poiché il bit (1) necessita solo di 1 bit per memorizzare il valore booleano mentre tinyint (1) necessita di 8 bit.
arbitro
BIT(M) - approximately (M+7)/8 bytes
vedere: dev.mysql.com/doc/refman/8.0/en/storage-requirements.html
Mentre è vero che bool
e tinyint(1)
sono funzionalmente identici, bool
dovrebbe essere l'opzione preferita perché porta il significato semantico di ciò che si sta cercando di fare. Inoltre, molti ORM verranno convertiti bool
nel tipo booleano nativo del tuo linguaggio di programmazione.
La mia esperienza quando utilizzo Dapper per connettersi a MySQL è che è importante . Ho cambiato un bit non nullable (1) in un tinyint nullable (1) utilizzando lo script seguente:
ALTER TABLE TableName MODIFY Setting BOOLEAN null;
Quindi Dapper ha iniziato a lanciare eccezioni. Ho provato a guardare la differenza prima e dopo la sceneggiatura. E ho notato che il bit (1) era cambiato in tinyint (1).
Ho quindi eseguito:
ALTER TABLE TableName CHANGE COLUMN Setting Setting BIT(1) NULL DEFAULT NULL;
Che ha risolto il problema.
boolean
cometinyint(1)
. Quindi puoi usareboolean
,true
efalse
e MySQL li tratta cometinyint(1)
,1
e0
.