And no, you can not save 'y' to an integer field, so your rant is misplaced.
mysql> create table demo(int tinyint(1), bin binary(1));
mysql> insert into demo(int, bin) values ('y', 'y');
mysql> select * from demo;
+------+------+
| int | bin |
+------+------+
| 0 | y |
+------+------+ mysql> insert into demo values ('y', 'y');
Query OK, 1 row affected, 1 warning (0.01 sec)
mysql> show warnings;
+---------+------+------------------------------------------------------+
| Level | Code | Message |
+---------+------+------------------------------------------------------+
| Warning | 1366 | Incorrect integer value: 'y' for column 'n' at row 1 |
+---------+------+------------------------------------------------------+
If you want this type of warning to be treated as an error then adjust the setting: mysql> SET sql_mode = 'TRADITIONAL';
mysql> insert into demo values ('y', 'y');
ERROR 1366 (HY000): Incorrect integer value: 'y' for column 'n' at row 1MySQL chose to coerce fields to fit the type. You don't like that choice, but other people find it useful. And MySQL gives you a choice to change it if you wish.
Judging by how popular and successful they are I think those chose correctly.
This article is a failure story for maciej. MySQL may have chosen correctly for its own popularity (although that's debatable; this choice might not be a success factor) but it did not choose correctly for the success of its users, with this article being a clear example.
Attributing their success to their choice of DB is insulting at best.
The coercing bin('y') to 0 makes no sense though - I agree with you there.
The philosophy of attempting to work when possible (coercion and other things) is good.
They clearly messed up here, but it doesn't mean they should never try to coerce values.
Even the warning when you try it makes no sense (what double?):
1292: Truncated incorrect DOUBLE value: 'y '
It's clearly a bug, and not something fundamental to MySQL.