On one server, when I run:
mysql> select now();
+---------------------+
| now() |
+---------------------+
| 2009-05-30 16:54:29 |
+---------
On Windows (IIS) in order to be able to SET GLOBAL time_zone = 'Europe/Helsinki' (or whatever) the MySQL time_zone description tables need to be populated first.
I downloaded these from this link https://dev.mysql.com/downloads/timezones.html
After running the downloaded SQL query I was able to set the GLOBAL time_zone and resolve the issue I had where SELECT NOW(); was returning GMT rather than BST.
To set the standard time zone at MariaDB you have to go to the 50-server.cnf file.
sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf
Then you can enter the following entry in the mysqld section.
default-time-zone='+01:00'
Example:
#
# These groups are read by MariaDB server.
# Use it for options that only the server (but not clients) should see
#
# See the examples of server my.cnf files in /usr/share/mysql/
#
# this is read by the standalone daemon and embedded servers
[server]
# this is only for the mysqld standalone daemon
[mysqld]
#
# * Basic Settings
#
user = mysql
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
port = 3306
basedir = /usr
datadir = /var/lib/mysql
tmpdir = /tmp
lc-messages-dir = /usr/share/mysql
skip-external-locking
### Default timezone ###
default-time-zone='+01:00'
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
The change must be made via the configuration file, otherwise the MariaDB server will reset the mysql tables after a restart!
If anyone is using GoDaddy Shared Hosting, you can try for following solution, worked for me.
When starting DB connection, set the time_zone command in my PDO object e.g.:
$pdo = new PDO($dsn, $user, $pass, $opt);
$pdo->exec("SET time_zone='+05:30';");
Where "+05:30" is the TimeZone of India. You can change it as per your need.
After that; all the MySQL processes related to Date and Time are set with required timezone.
Source : https://in.godaddy.com/community/cPanel-Hosting/How-to-change-TimeZone-for-MySqL/td-p/31861
First to figure out what the time_zone is you can query
SHOW VARIABLES LIKE '%time_zone%';
Your output should be something similar as follows
**Variable_name** **Value**
system_time_zone CDT
time_zone SYSTEM
Then if you want to confirm that you are in say some time zone like CDT instead of something like EST you can check what time it thinks your machine is in by saying
SELECT NOW();
If this is not the time you want you need to change it... all you need to do is SET time_zone = timezone_name
. Make sure it is one that is in Continent/City
format.
If you are on a shared server because you have a hosting service please refer to these answers regarding changing the php.ini file or the .htaccess file.
Edit the MySQL config file
sudo nano /etc/mysql/my.cnf
Scroll and add these to the bottom. Change to relevant time zone
[mysqld]
default-time-zone = "+00:00"
Restart the server
sudo service mysql restart
I thought this might be useful:
default-time-zone='+00:00'
To see what value they are set to:
SELECT @@global.time_zone;
To set a value for it use either one:
SET GLOBAL time_zone = '+8:00';
SET GLOBAL time_zone = 'Europe/Helsinki';
SET @@global.time_zone = '+00:00';
(Using named timezones like 'Europe/Helsinki' means that you have to have a timezone table properly populated.)
Keep in mind that +02:00
is an offset. Europe/Berlin
is a timezone (that has two offsets) and CEST
is a clock time that corresponds to a specific offset.
SELECT @@session.time_zone;
To set it use either one:
SET time_zone = 'Europe/Helsinki';
SET time_zone = "+00:00";
SET @@session.time_zone = "+00:00";
Both might return SYSTEM which means that they use the timezone set in my.cnf.
For timezone names to work, you must setup your timezone information tables need to be populated: http://dev.mysql.com/doc/refman/5.1/en/time-zone-support.html. I also mention how to populate those tables in this answer.
TIME
SELECT TIMEDIFF(NOW(), UTC_TIMESTAMP);
It will return 02:00:00 if your timezone is +2:00.
SELECT UNIX_TIMESTAMP();
SELECT UNIX_TIMESTAMP(NOW());
SELECT UNIX_TIMESTAMP(`timestamp`) FROM `table_name`
SELECT UNIX_TIMESTAMP(CONVERT_TZ(`utc_datetime`, '+00:00', @@session.time_zone)) FROM `table_name`
Note: Changing the timezone will not change the stored datetime or timestamp, but it will show a different datetime for existing timestamp columns as they are internally stored as UTC timestamps and externally displayed in the current MySQL timezone.
I made a cheatsheet here: Should MySQL have its timezone set to UTC?