The link to the 2000 article does not help much, as much has already changed since then and may no longer be true. As already mentioned in other related issues, TIMESTAMP values โโrefer to a specific point in time relative to January 1, 1970 in UTC. DATETIME values, in contrast, simply store some date and time without reference to any time. They are more like the displayed values, the clock on the wall that shows you some kind of value. 2018-01-12 14:00:00 may be different times in different time zones if you want to track when something happened.
TIMESTAMP, on the other hand, is always stored as UTC, and when read or used in the datetime function, it is automatically converted back to the default time zone of the connection or database. Therefore, when your connection is set to +02: 00, the actual value that will be stored in the TIMESTAMP column will be 2018-01-12 12:00:00 instead of 2018-01-12 14:00:00 . When you then read the column with the +05: 00 connection, you will see 2018-01-12 17:00:00 . The DATETIME value will always remain at 2018-01-12 14:00:00 no matter what time zone is set for the database or connection.
So for tracking when something happened or when something happens / should happen, TIMESTAMP is the way to go. If you just want to keep a fixed time regardless of the time zone, use DATETIME (for example, users will receive an email at 2 a.m., since 2 a.m. is the same for everyone).
source share