So, we can change MySQL server timezone or current connection timezone, but we can't change specific database timezone?
Interesting thing, there is no such thing as permanent timezone. Most/all countries change timezone during summer and winter

So Greenwich is not GMT+0, it is GMT+0 or GMT+1 depending on day of the year

Originally, I wanted to set timezone to GMT+0 so everyone could calculate form it their local time. But it would be wrong half of the year... Therefore for a consistent timezone I would have to use Europe/London (which is +0 or +1).
Another thing, since the timezone changes on all computers every year, it can't be hardcoded (into UNIX timestamp and database DATE/TIMESTAMP field types), it would force recalculation and rewrite of all these fields each year on all computers...
For the DATETIME and DATE range descriptions, “supported” means that although earlier values might work, there is no guarantee.
As for "The supported range is '1000-01-01 00:00:00' to '9999-12-31 23:59:59'.", supported means it is guaranteed to work, in fact you can use bigger ranges, so it must be stored as something like 64bit version of UNIX timestamp I guess...
The current session time zone setting affects display and storage of time values that are zone-sensitive. This includes the values displayed by functions such as NOW() or CURTIME(), and values stored in and retrieved from TIMESTAMP columns. Values for TIMESTAMP columns are converted from the current time zone to UTC for storage, and from UTC to the current time zone for retrieval.
The current time zone setting does not affect values displayed by functions such as UTC_TIMESTAMP() or values in DATE, TIME, or DATETIME columns. Nor are values in those data types stored in UTC; the time zone applies for them only when converting from TIMESTAMP values. If you want locale-specific arithmetic for DATE, TIME, or DATETIME values, convert them to UTC, perform the arithmetic, and then convert back.
Also this. Seems like everything is stored as true UTC internally.