Hoe stel ik de tijdzone van MySQL in?

Op één server, wanneer ik voer:

mysql> select now();
+---------------------+
| now()               |
+---------------------+
| 2009-05-30 16:54:29 |
+---------------------+
1 row in set (0.00 sec)

Op een andere server:

mysql> select now();
+---------------------+
| now()               |
+---------------------+
| 2009-05-30 20:01:43 |
+---------------------+
1 row in set (0.00 sec)

Antwoord 1, autoriteit 100%

Ik dacht dat dit nuttig zou kunnen zijn:

Er zijn drie plaatsen waar de tijdzone kan worden ingesteld in MySQL:

In het bestand “my.cnf” in de [mysqld] sectie

default-time-zone='+00:00'

@@global.time_zone variabele

Om te zien op welke waarde ze zijn ingesteld:

SELECT @@global.time_zone;

Gebruik een van beide om er een waarde voor in te stellen:

SET GLOBAL time_zone = '+8:00';
SET GLOBAL time_zone = 'Europe/Helsinki';
SET @@global.time_zone = '+00:00';

(Het gebruik van benoemde tijdzones zoals ‘Europa/Helsinki’ betekent dat u een correct ingevulde tijdzonetabel moet hebben.)

Houd er rekening mee dat +02:00een offset is. Europe/Berlinis een tijdzone (met twee verschuivingen) en CESTis een kloktijd die overeenkomt met een specifieke verschuiving.

@@session.time_zone variabele

SELECT @@session.time_zone;

Gebruik een van beide om het in te stellen:

SET time_zone = 'Europe/Helsinki';
SET time_zone = "+00:00";
SET @@session.time_zone = "+00:00";

Beide kunnen SYSTEM retourneren, wat betekent dat ze de tijdzone gebruiken die is ingesteld in my.cnf.

Om tijdzonenamen te laten werken, moet u uw tijdzone-informatietabellen instellen die moeten worden ingevuld: http://dev.mysql.com/doc/refman/5.1/en/time-zone-support.html. Ik vermeld ook hoe je die tabellen kunt invullen in dit antwoord.

Om de huidige tijdzone-offset te krijgen als TIME

SELECT TIMEDIFF(NOW(), UTC_TIMESTAMP);

Het zal 02:00:00 retourneren als uw tijdzone +2:00 is.

Om de huidige UNIX-tijdstempel te krijgen:

SELECT UNIX_TIMESTAMP();
SELECT UNIX_TIMESTAMP(NOW());

Om de tijdstempelkolom als UNIX-tijdstempel te krijgen

SELECT UNIX_TIMESTAMP(`timestamp`) FROM `table_name`

Om een UTC datetime-kolom als UNIX-tijdstempel te krijgen

SELECT UNIX_TIMESTAMP(CONVERT_TZ(`utc_datetime`, '+00:00', @@session.time_zone)) FROM `table_name`

Opmerking: het wijzigen van de tijdzone zal de opgeslagen datumtijd of tijdstempel niet wijzigen, maar het zal een andere datumtijd weergeven voor bestaande tijdstempelkolommen, aangezien deze intern worden opgeslagen als UTC-tijdstempels en extern worden weergegeven in de huidige MySQL tijdzone.

Ik heb hier een cheatsheet gemaakt: Moet MySQL hebben de tijdzone is ingesteld op UTC?


Antwoord 2, autoriteit 16%

Voor iedereen die dit probleem nog steeds heeft:

value="jdbc:mysql://localhost:3306/dbname?serverTimezone=UTC"

Werkte voor mij. Voeg gewoon ?serverTimezone=UTCtoe aan het einde.


Antwoord 3, autoriteit 10%

Wanneer u de tijdzoneserver voor MySQL of PHP kunt configureren:

Onthoud:

  1. Tijdzonesysteem wijzigen. Voorbeeld voor Ubuntu:

    $ sudo dpkg-reconfigure tzdata
    
  2. Start de server opnieuw of u kunt Apache 2 en MySQL opnieuw starten:

    /etc/init.d/mysql restart
    

Antwoord 4, autoriteit 10%

Als u het voor de huidige sessie wilt instellen, doet u het volgende:

SET time_zone = timezonename;

Antwoord 5, autoriteit 9%

Voer dit eenvoudig uit op uw MySQL-server:

SET GLOBAL time_zone = '+8:00';

Waar +8:00 je tijdzone is.


Antwoord 6, autoriteit 3%

Dit werkt voor mij voor een locatie in India:

SET GLOBAL time_zone = "Asia/Calcutta";
SET time_zone = "+05:30";
SET @@session.time_zone = "+05:30";

Antwoord 7, autoriteit 3%

Dit is een vraag van 10 jaar oud, maar hoe dan ook, hier is wat voor mij werkte. Ik gebruik MySQL 8.0 met Hibernate 5 en SpringBoot 4.

Ik heb het bovenstaande geaccepteerde antwoord geprobeerd, maar werkte niet voor mij, wat voor mij werkte, is dit:

db.url=jdbc:mysql://localhost:3306/testdb?useSSL=false&serverTimezone=Europe/Warsaw

Als dit helpt u niet te vergeten om het te upvanteren: D


Antwoord 8, Autoriteit 2%

Houd in gedachten, dat ‘land / zone’ niet werkt, soms … Dit probleem is geen OS, MySQL-versie en hardwareafhankelijkheid – ik heb het sinds FreeBSD 4 en Slackware Linux in jaar 2003 tot vandaag ontmoet. MySQL van versie 3 tot de nieuwste bronstam. Het is vreemd, maar het gebeurt wel. Bijvoorbeeld:

root@Ubuntu# ls -la /usr/share/zoneinfo/US
total 8
drwxr-xr-x  2 root root 4096 Apr 10  2013 .
drwxr-xr-x 22 root root 4096 Apr 10  2013 ..
lrwxrwxrwx  1 root root   18 Jul  8 22:33 Alaska -> ../SystemV/YST9YDT
lrwxrwxrwx  1 root root   21 Jul  8 22:33 Aleutian -> ../posix/America/Adak
lrwxrwxrwx  1 root root   15 Jul  8 22:33 Arizona -> ../SystemV/MST7
lrwxrwxrwx  1 root root   18 Jul  8 22:33 Central -> ../SystemV/CST6CDT
lrwxrwxrwx  1 root root   18 Jul  8 22:33 Eastern -> ../SystemV/EST5EDT
lrwxrwxrwx  1 root root   37 Jul  8 22:33 East-Indiana -> ../posix/America/Indiana/Indianapolis
lrwxrwxrwx  1 root root   19 Jul  8 22:33 Hawaii -> ../Pacific/Honolulu
lrwxrwxrwx  1 root root   24 Jul  8 22:33 Indiana-Starke -> ../posix/America/Knox_IN
lrwxrwxrwx  1 root root   24 Jul  8 22:33 Michigan -> ../posix/America/Detroit
lrwxrwxrwx  1 root root   18 Jul  8 22:33 Mountain -> ../SystemV/MST7MDT
lrwxrwxrwx  1 root root   18 Jul  8 22:33 Pacific -> ../SystemV/PST8PDT
lrwxrwxrwx  1 root root   18 Jul  8 22:33 Pacific-New -> ../SystemV/PST8PDT
lrwxrwxrwx  1 root root   20 Jul  8 22:33 Samoa -> ../Pacific/Pago_Pago
root@Ubuntu#

En zo’n statement zou moeten werken:

SET time_zone='US/Eastern';

Maar je hebt dit probleem:

Foutcode: 1298. Onbekende of onjuiste tijdzone: ‘EUS/Eastern’

Bekijk de submap in uw zone-informatiemap en bekijk de ACTUAL-bestandsnaam voor symlink, in dit geval is het EST5EDT. Probeer dan in plaats daarvan deze verklaring:

SET time_zone='EST5EDT';

En het werkt eigenlijk zoals het hoort! 🙂 Houd deze truc in gedachten; Ik heb het niet gedocumenteerd gezien in MySQL-handleidingen en officiële documentatie. Maar het lezen van de bijbehorende documentatie is een must: MySQL 5.5 officiële tijdzonedocumentatie– en vergeet niet om tijdzonegegevens zomaar in uw server te laden (uitvoeren als rootgebruiker!):

mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root mysql

Truc nummer één – het moet precies onder MySQL root-gebruiker worden gedaan. Het kan mislukken of een niet-werkend resultaat opleveren, zelfs van de gebruiker die volledige toegang heeft tot een MySQL-database – ik heb de storing zelf gezien.


Antwoord 9, autoriteit 2%

U kunt de standaardtijdzone van de server opgeven wanneer u deze start, zie http://dev.mysql.com/doc/refman/5.1/en/server-options.htmlen specifiek de --default-time-zone=timezoneoptie. U kunt de globale en sessietijdzones controleren met

SELECT @@global.time_zone, @@session.time_zone;

stel een of beide in met de SET-instructie, &c; zie http://dev.mysql.com/doc/ refman/5.1/en/time-zone-support.htmlvoor veel meer details.


Antwoord 10

Als je PDO gebruikt:

$offset="+10:00";
$db->exec("SET time_zone='".$offset."';");

Als je MySQLi gebruikt:

$db->MySQLi->query("SET time_zone='".$offset."';");

Hier vindt u meer informatie over het opmaken van de offset:
https://www.sitepoint.com/synchronize-php-mysql-timezone- configuratie/


Antwoord 11

Oude vraag met nog een suggestie:

Als je onlangs de tijdzone van het besturingssysteem hebt gewijzigd, bijv. via:

unlink /etc/localtime
ln -s /etc/usr/share/zoneinfo/US/Eastern /etc/localtime

… MySQL (of MariaDB) merkt het pas als u de db-service opnieuw start:

service mysqld restart

(of)

service mariadb restart

Antwoord 12

Als u de MySql Workbenchgebruikt, kunt u dit instellen door de beheerdersweergave te openen en het tabblad Geavanceerd te selecteren. Het bovenste gedeelte is “Lokalisatie” en het eerste selectievakje moet “standaardtijdzone” zijn. Vink dat vakje aan en voer vervolgens de gewenste tijdzone in, start de server opnieuw op en u bent klaar om te gaan.


Antwoord 13

Als je eerst wilt weten wat de tijdzone is, kun je een query uitvoeren

SHOW VARIABLES LIKE '%time_zone%'; 

Uw uitvoer zou ongeveer als volgt moeten zijn

**Variable_name**     **Value**
system_time_zone      CDT
time_zone             SYSTEM

Als u vervolgens wilt bevestigen dat u zich in bijvoorbeeld een tijdzone zoals CDT bevindt in plaats van iets als EST, kunt u controleren hoe laat het denkt dat uw machine zich bevindt door te zeggen

SELECT NOW();

Als dit niet de tijd is die u wilt, moet u deze wijzigen… het enige wat u hoeft te doen is SET time_zone = timezone_name. Zorg ervoor dat deze de indeling Continent/Cityheeft.

Als je op een gedeelde server zit omdat je een hostingservice hebt, raadpleeg dan deze antwoordenmet betrekking tot het wijzigen van het php.ini-bestand of het .htaccess-bestand.


Antwoord 14

Om de standaard tijdzone op MariaDBin te stellen, moet je naar het bestand 50-server.cnfgaan.

sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf

Vervolgens kunt u het volgende item invoeren in de mysqld-sectie.

default-time-zone='+01:00'

Voorbeeld:

#
# 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.

De wijziging moet worden gedaan via het configuratiebestand, anders zal de MARIADB-server de MySQL-tabellen na een herstart opnieuw instellen!


Antwoord 15

Bewerk het MySQL Config-bestand

sudo nano /etc/mysql/my.cnf

Scroll en voeg deze toe aan de onderkant. Wijzigen naar relevante tijdzone

[mysqld]
default-time-zone = "+00:00"

Start de server opnieuw

sudo service mysql restart

Antwoord 16

Vanaf MySQL Workbench 8.0 onder het tabblad Server, als u naar status- en systeemvariabelen gaat, kunt u het hier instellen.


Antwoord 17

U moet de uw locatie-timezone instellen. Dus dat volgt onder het proces
Open uw MSQLWORKBENCH
Schrijf een eenvoudige SQL-opdracht als deze;

select now();

En ook uw URL kan zo zijn;

url = "jdbc:mysql://localhost:3306/your_database_name?serverTimezone=UTC";

Antwoord 18

Set MySQL TimeZone op Server door in te loggen op MySQL Server Er is tijdzone-waarde ingesteld zoals vereist. Voor IST

SET SESSION time_zone = '+5:30';

Voer vervolgens in SELECT NOW();


Antwoord 19

op Windows (IIS) om Global Time_Zone = ‘Europa / Helsinki’ (of alles) in te stellen, moeten de MySQL Time_Zone Beschrijvingstabellen eerst worden ingevuld.

Ik heb deze van deze link gedownload https://dev.mysql.com/downloads/timezones .html

Na het uitvoeren van de gedownloade SQL-query was ik in staat om de Global Time_Zone in te stellen en het probleem op te lossen dat ik nu had geselecteerd (); keerde GMT terug in plaats van BST.


Antwoord 20

In mijn geval was de oplossing om de parameter van ServertimeZone in geavanceerde instellingen in te stellen op een passende waarde (CET voor mijn tijdzone).

Zoals ik intellij gebruik, gebruik ik de databasemodule. Tijdens het toevoegen van een nieuwe verbinding met de database en na het toevoegen van alle relevante parameters in het tabblad Algemeen, was er een foutmelding op de knop “Testverbinding”. Nogmaals, de oplossing is om ServertimeZone-parameter in het tabblad Advanced in te stellen.


Antwoord 21

Als iemand Godaddy Shared Hosting gebruikt, kunt u het proberen voor de volgende oplossing, werk voor mij.

Start bij het starten van DB-verbinding de TIME_ZONE-opdracht in My PDO-object b.v.:

$pdo = new PDO($dsn, $user, $pass, $opt);
$pdo->exec("SET time_zone='+05:30';");

waar “+05: 30” de tijdzone van India is. U kunt het wijzigen volgens uw behoefte.

daarna; Alle MySQL-processen met betrekking tot datum en tijd zijn ingesteld met de vereiste tijdzone.

Bron: https://in.godaddy.com/community/cpanel-hosting/how-to-change-timezone-for-mysql/td-p/31861


Antwoord 22

U kunt dit eenvoudig doen door de OS-tijdzone te wijzigen als deze overeenkomt met uw scenario.

In Ubuntu, om tijdzones te vermelden, voert u deze opdracht uit

sudo timedatectl list-timezones

Voer deze opdracht uit met uw tijdzone

om de OS-tijdzone te wijzigen.

timedatectl set-timezone America/New_York

Controleer de OS-tijdzone, voer

date

Start vervolgens de MySQL

opnieuw op

sudo service mysql restart

Naar chek-tijdzone in MySQL, log in en voer

SELECT TIMEDIFF(NOW(), UTC_TIMESTAMP);

Other episodes