Risposte:
Un TINYINT è un valore intero a 8 bit, un campo BIT può memorizzare tra 1 bit, BIT (1) e 64 bit, BIT (64). Per valori booleani, BIT (1) è piuttosto comune.
Dalla panoramica dei tipi numerici ;
BIT [(M)]
Un tipo di campo di bit. M indica il numero di bit per valore, da 1 a 64. Il valore predefinito è 1 se M viene omesso.
Questo tipo di dati è stato aggiunto in MySQL 5.0.3 per MyISAM ed esteso in 5.0.5 a MEMORY, InnoDB, BDB e NDBCLUSTER. Prima di 5.0.3, BIT è un sinonimo di TINYINT (1).
TINYINT [(M)] [UNSIGNED] [ZEROFILL]
Un numero intero molto piccolo. L'intervallo con segno è compreso tra -128 e 127. L'intervallo senza segno è compreso tra 0 e 255.
Considera inoltre questo;
BOOL, BOOLEANO
Questi tipi sono sinonimi di TINYINT (1). Un valore pari a zero è considerato falso. I valori diversi da zero sono considerati veri.
boolean
richiederà un byte anche se in realtà è solo un po ', quindi un BIT (1) è migliore dopo la v5.0.3?
BOOL
/ BOOLEAN
siano alias per TINYINT(1)
invece di BIT
. Certo, finiscono per occupare un intero byte, ma semanticamente BIT
sarebbe molto più appropriato.
Tutte queste discussioni teoriche sono fantastiche, ma in realtà, almeno se stai usando MySQL e anche per SQLServer, è meglio attenersi a dati non binari per i tuoi booleani per il semplice motivo che è più facile lavorare con te stai trasmettendo i dati, interrogando e così via. È particolarmente importante se stai cercando di ottenere l'interoperabilità tra MySQL e SQLServer (cioè sincronizzi i dati tra i due), perché la gestione del tipo di dati BIT è diversa nei due. Quindi, in pratica, avrai molti meno problemi se rimani con un tipo di dati numerico. Consiglierei a MySQL di attenersi a BOOL o BOOLEAN che viene memorizzato come TINYINT (1). Anche il modo in cui MySQL Workbench e MySQL Administrator visualizzano il tipo di dati BIT non è carino (è un piccolo simbolo per dati binari).
BIT dovrebbe consentire solo 0 e 1 (e NULL, se il campo non è definito come NOT NULL). TINYINT (1) consente qualsiasi valore che può essere memorizzato in un singolo byte, -128..127 o 0..255 a seconda che non sia o meno senza segno (l'1 indica che si intende utilizzare solo una cifra, ma lo fa non ti impedisce di memorizzare un valore maggiore).
Per le versioni precedenti alla 5.0.3, BIT viene interpretato come TINYINT (1), quindi non c'è differenza.
BIT ha una semantica "questo è un booleano" e alcune app considereranno TINYINT (1) allo stesso modo (a causa del modo in cui MySQL lo trattava), quindi le app potrebbero formattare la colonna come una casella di controllo se controllano il tipo e decidere un formato basato su quello.
Potrebbe essere sbagliato ma:
Tinyint è un numero intero compreso tra 0 e 255
bit è 1 o 0
Quindi per me bit è la scelta per i booleani
Dalla mia esperienza ti dico che BIT ha problemi con i tipi di SO Linux (Ubuntu per esempio). Ho sviluppato il mio db su Windows e dopo aver distribuito tutto su Linux, ho avuto problemi con le query che venivano inserite o selezionate da tabelle che avevano BIT DATA TYPE.
Bit non è sicuro per ora. Sono passato a tinyint (1) e ha funzionato perfettamente. Voglio dire che hai solo bisogno di un valore per differenziare se è 1 o 0 e tinyint (1) va bene per quello