Commenti(0)
Emulare il tipo BOOL
Una ricetta per superare il limite delle variabili BOOL
Il tipo di dati di cui si sente più la mancanza in MySQL è probabilmente BOOL. Spesso un dato può assumere solo due stati (vero / falso) e al limite lo pseudo-valore NULL. Come conviene comportarsi allora?
Il tipo da scegliere
Quando si crea o si modifica una tabella, è possibile specificare che è BOOL (o BOOLEAN). Siccome in realtà questo tipo non esiste, verrà creata un campo TINYINT.
L’istruzione:
1ALTER TABLE tab ADD COLUMN c BOOL NOT NULL;
Equivale a:
1ALTER TABLE tab ADD COLUMN c TINYINT(1) NOT NULL;
La conseguenza è la mancata ottimizzazione: ogni dato TINYINT occupa 1 byte di spazio, mentre un dato booleano dovrebbe occupare 1 bit.
Sebbene il tipo ENUM consenta di indicare come unici valori accettabili ‘0’ e ‘1’, non è consigliabile il suo uso perchè il dato occuperebbe 2 byte.
TRUE e FALSE
Utilizzando TINYINT si potrà usare 0 come sinonimo di FALSE e 1 come sinonimo di TRUE. Bisogna stare attenti perchè ogni numero diverso da 1 risulterà diverso da FALSE, ma non sarà uguale a TRUE.
Qualche esempio:
Quest’ultimo problema si risolve facilmente modificando la sintassi:
1SELECT IF(3, 1, 0); # restituisce 1
Altre sintassi
E’ possibile usare le seguenti sintassi per sapere se un dato è TRUE o FALSE:
Questa sintassi è simile a quella usata per confrontare i valori con NULL. Quest’ultimo può anche essere sostituito dalla parola UNKOWN (ma solo dopo IS, non in altri ambiti).
1SELECT NULL IS UNKNOWN; # restituisce 1
Condividi su:
Esprimi un voto:
Argomenti chiave:

MySQL Report un tool di shell per tenere tutto sotto controllo