Ciao a tutti che "tipo" dovrei mettere a un campo per avere un risultato booleano: true o false?
Ciao a tutti che "tipo" dovrei mettere a un campo per avere un risultato booleano: true o false?
il suggerimento migliore in assoluto è: non farlo.
per ragioni di portabilità (i booleani sono i peggiori in assoluto, addirittura peggio delle date) usa semplicemente un intero.
falso=0
vero=1
fine dei problemi
se ti vuoi complicare la vita c'è proprio l'enum
enum('true','false') ma te lo stra-sconsiglio
Mi accodo a questa discussione perchè sono da poco passato a MySQL (da .mdb) e pensavo di fare una figata utilizzando il campo ENUM:
attivo = ENUM ('true','false')
nelle prove però si è evidenziato che il campo non risponde allo stesso modo al true/false, infatti se faccio
mi aspetterei in caso di 'false' nel campo che la condizione restituisse appunto false, invece considera il campo sempre a true in quanto è presente del testo.Codice PHP:
if ($row['attivo']) {...}
Comportamento diverso (e corretto) se il campo viene così settato:
attivo = ENUM ('0','1')
Comportamente corretto anche con TINYINT(1) (come segnalato da Razorblade).
Quale consigliate voi per evitare problemi?
se vuoi controllare se c'è "true" devi fare un confronto a stringa, e così "false".Originariamente inviato da aasmdaa
Mi accodo a questa discussione perchè sono da poco passato a MySQL (da .mdb) e pensavo di fare una figata utilizzando il campo ENUM:
attivo = ENUM ('true','false')
nelle prove però si è evidenziato che il campo non risponde allo stesso modo al true/false, infatti se faccio
mi aspetterei in caso di 'false' nel campo che la condizione restituisse appunto false, invece considera il campo sempre a true in quanto è presente del testo.Codice PHP:
if ($row['attivo']) {...}
Comportamento diverso (e corretto) se il campo viene così settato:
attivo = ENUM ('0','1')
Comportamente corretto anche con TINYINT(1) (come segnalato da Razorblade).
Quale consigliate voi per evitare problemi?
potresti metterci "pippo" e "pluto"
---
La soluzione che consiglio è quella che ho già messo: flag intero e passa la paura (ed è di gran lunga la migliore per la portabilità)
E così ho fatto: TINYINT(1)
grazie