" ... while the proprietary guys seem to focus on obscure stuff that gets them the wow factor at their launch events."
Yeah, sure.
Keep thinking like this and MySQL will be another 'database for blogs and forums' for another decade :). Face it, MySQL isn't remoteley ready for *REAL* transactional and complex enviroments.
C'mon ... until 5.0 referencial integrity and views were absent. LOL.
Actually get your facts straight. Foreign key support has been around before 5.0, that being said it will take a while (as in not until 6.1) before the infrastructure will be provided by MySQL itself instead of relying on storage engines to hack on FK support. Or are you talking about triggers?
How VIEW's are a must have feature is beyond me. Its certainly nothing that is needed for any kind of web application. Unless you are talking about applications that need to interact with a complex third party system, which interacts with the same database.
That being said MySQL is definitely not a general purpose RDBMS when compared to PostgreSQL, Firebird and most of the proprietary competitors.
Lukas,
Just FYI, it's trivially easy to add custom operators to PostgreSQL. So if, for example, you wanted to make ~= be "null safe equals", then it takes about 8 lines of code to do so. I use ||+ as "null-safe concat with spaces" all the time.
However, I submit than any application designer finding themselves constantly needing a "null safe equals" is misusing nulls.
PostgreSQL is indeed lovely like that! :)
I have actually never used this operator in an application myself as far as I can remember. But I still think its convenient and I can see myself increasingly using it (up from 0% so far, its easy to say "increasingly"), since as I stated in a previous comment I am increasingly making columns NULLable. Web apps are really all about inviting users to share as much as they want and me figuring out how to provide services as good as possible with as little as I have been given. In these situations I often (but certainly not even half of the time) have to differentiate if something is really NULL.