I know the warning is by DST, but why different results with the QUERY:
SELECT CONVERT_TZ('2002-10-23T15:57:03Z', 'SYSTEM', 'America/Bogota')
when I run the QUERY in CentOs 7 with:
[VERSION()] => 5.7.33
[@@SESSION.sql_mode] => ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
[@@session.time_zone] => GMT
from MySQL I get
NULL
when I run the QUERY in Windows 10 with:
[VERSION()] => 5.7.33
[@@SESSION.sql_mode] => ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
[@@session.time_zone] => GMT
from MySQL I get
[CONVERT_TZ('2002-10-23T15:57:03Z', 'GMT', 'America/Bogota')] => 2002-10-23 10:57:03
WARNING (
[Level] => Warning
[Code] => 1292
[Message] => Truncated incorrect datetime value: '2002-10-23T15:57:03Z'
)
if BOTH servers have SAME ambient, why the result is different?
in Windows I don't have my.ini
this is the file my.ini
in CentOs 7:
# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/5.7/en/server-configuration-defaults.html
[mysqld]
performance-schema=0
#
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
#
# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin
#
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
innodb_buffer_pool_size=53477376
max_allowed_packet=268435456
open_files_limit=40000
innodb_file_per_table=1
default_storage_engine=MyIsam
default_tmp_storage_engine=MyIsam
character_set_server=utf8mb4
collation_server=utf8mb4_general_ci
MySQL is a bit lame when it comes to timezones.
The trailing
Z
is not recognized, but I think you only get a warning.Do you have the timezone table loaded? (I don't know if that is a separate step on your installation. See https://dev.mysql.com/downloads/timezones.html )
This works better, but requires knowing the adjustment factor:
TIMESTAMP
TIMESTAMP
is nothing more than a number -- the number of seconds from the beginning of 1970. However, when storing/fetching, the timezone info based on some settings converts from the system time to/from UTC:The
SYSTEM
is based on the OS setting.DATETIME
DATETIME
(and the date-onlyDATE
) are essentially a picture of the clock on your wall. That is, there no information stored in it other than what you can see here:No timezone information is stored. Nor is any TZ info honored in a string:
Sub-second Milliseconds example. (Up to 6 can be used)
Reference
That came from https://dev.mysql.com/doc/refman/8.0/en/datetime.html , which may have more information of interest.
That also shows 8.0.22 having:
which might help you.