In una tabella mysql ho dei campi enum che valorizzo con 'true' o 'false', proprio i valori non il booleano true o false.

enum('true','false') non BOOLEAN per intenderci.

nella mia pagina controllo questi valori e visualizzo delle icone corrispondenti nella pagina.

Perchè se ho un campo di tipo int valorizzato a 0 entrambi i controlli passano come veri?

Codice PHP:
if($array['campo'] == 'true'# se il valore è 0 il confronto è true
if($array['campo'] == 'false'# se il valore è 0 il confronto è true 
Ovviamente risolvo con === ma è giusto questo comportamento, non sto usando le costanti true e false, ma delle semplici stringhe.