PostgreSQL forces you to write proper queries. MySQL is designed to accommodate lousy practices, and all those implicit type conversions and non-standard syntax will come back to bite you as a big WTF.
Other reasons I like PostgreSQL: more data types (MySQL doesn't even have a boolean type), partial indexing (a godsend when you have large tables), ability to use multiple indexes when querying, full-text search and ACID are not mutually exclusive, and multiple procedural languages.
This. I was appalled when I realized that MySQL will quietly seem to execute
select x from y group by z
x isn't a grouping column or an aggregate function, so where does it get the value for each group? It just arbitrarily picks a value from one of the rows, even if the other rows had different values!
Other reasons I like PostgreSQL: more data types (MySQL doesn't even have a boolean type), partial indexing (a godsend when you have large tables), ability to use multiple indexes when querying, full-text search and ACID are not mutually exclusive, and multiple procedural languages.
[edit] Oops, didn't mean to make this a reply.