Here you can find a list of weird stuff in MySQL, bugs, missing features etc. Here is another resource you might find useful.

Weird behaviour
1.You can define a varchar/char field 'auto_increment'.
2.SELECT 'A' = 'a' gets you true.
3.Int(10) is the same as int(1) eventhough the manual says differently.
4.Tablenames are treated case-sensitive on *n?x systems, not on windows.
5.Change a piece of a table definition and mysql creates a temporary copy of the table, very nice if you have a 6GB table occupying a 10GB tablespace... (yes, the change will fail)
6.Adding indices result in a similar temporary copy.
7.What does zerofill do to a integer field? A database is meant to store data, not to format it while storing.
8.When I define a char(32) (md5-strings anyone) field, I really don't mean varchar(32) (MySQL automatically changes all char(X >4) to varchar(X)).
9.This is correct according to mysql: SELECT a, b, count(c) FROM d GROUP BY a; what will MySQL do with the b?
10.If you update a record and set it to the same value, mysql'll define that as unaffected. Even if it does change a timestamp field.
1.Insert a NULL value in a NOT NULL field and the query gets executed. In short, you can't force NOT NULL...
2.Under high loads MySQL will restart itself occasionally. When a child doesn't die fast enough "socket already in use"-error occurs.
3.Replication doesn't work that well.
4.MySQL will always try to insert a date into a date field, even if you supply an empty or bogus string (it'll insert 0000-00-00 then).
5.When underflowing or overflowing a integer field, mysql will insert the largest or smallest possible value instead.
6.Long texts are chopped to the correct size, not denied.
7.MySQL will also insert 0 into a numeric field if you supply an empty or bogus string.
8.Close a connection and a long query still runs on... The only way to kill it is via the (mysql)admin
9.Connections with a timeout? Very nice when you need to do a lot of calculations on your data or a query lasts very long. "Lost connection to MySQL server during query"
10.You can insert the same value twice in a ENUM-field
11.You can't use a Temporary table more than once in a query.
Missing functionality
1.No subselects in 3.x versions and a partial implementation in 4.0.x.
2.No triggers.
3.No foreign keys with default tableformat.
4.No (free) decent hotbackup tool (in the distribution).
5.No transactionsupport in the default tableformat.
6.No procedural language(s).
7.No stored procedures/functions.
8.No ipaddress or geometrical datatypes.
9.JDBC driver still buggy.
10.No specific character encoding and multibyte charsupport.
11.MySQL has trouble optimising complex queries, SELECT ... FROM ... WHERE something BETWEEN ... can be considerd complex in some cases...
12.It can't use multiple indices for filtering records from one table.
13.It can't do ORDER BY ... DESC that well, it'll do a filesort. Even if there are only two results to sort.
14.There is no locale and timezone support.
15.No rowlevel tablelocking, except in innodb.
16.No views.
17.Unions are not available in the more mainstream 3.x releases, only in the brand new 4.x releases.
18.The explain command hardly explains anything.
19.No real boolean/bit/bitarray type.
20.No CHECK-contraints.