Comment puis-je faire des fonctions NOW () et () curdate de MySQL utilisent UTC?

StackOverflow https://stackoverflow.com/questions/947299

  •  09-09-2019
  •  | 
  •  

Question

Je veux qu'il appelle ainsi NOW () et CURDATE () dans les requêtes MySQL retournent la date UTC. Comment puis-je faire cela se produit sans passer par et changer toutes les requêtes qui utilisent ces fonctions?

Était-ce utile?

La solution

enfin trouvé ce que je cherchais ...

Dans my.cnf,

[mysqld_safe]
timezone = UTC

Je mettais cette option sous [mysqld], et mysql ne parvenait pas à démarrer.

L'appel "SET time_zone = '+ 0h00';" sur chaque charge la page fonctionnerait aussi, mais je n'aime pas l'idée d'appeler cette requête sur chaque chargement de page unique.

Autres conseils

Régler l'horloge de votre serveur UTC. Pas vraiment.

Si vous pouvez le faire, faites-le faire.

L'un des plus grands maux de tête est des emplois « cron » etc, en cours d'exécution dans la zone heure locale, cela signifie que certains emplois Cron vont se manquer une fois par an, et tout le long repos à un autre moment GMT pour la moitié de l'année (I « m en supposant que vous êtes dans un fuseau horaire qui a le temps d'économie d'ici la lumière du jour).

MySQL a le temps de soutien zone, mais il est fou et foiré. Ne pas utiliser si vous n'avez pas. Il suffit de régler l'horloge de votre serveur UTC et le temps va commencer à travailler comment il se doit.

Je sais que le changement de l'horloge du serveur est un changement majeur pour tout système géré, et vous pouvez avoir un grand nombre de serveurs et de services qui pourraient être touchés, mais s'il vous plaît, essayer de le faire de toute façon. Le travail d'AQ peut être important, mais essayez.

fichier Goto et ajoutez cette ligne ci-dessous dans la section [mysqld]

  

default-fuseau horaire = '+00: 00'

Redémarrez ensuite votre mysql. Maintenant, sélectionnez curtime (); montre l'heure GMT.

Si vous changez le fuseau horaire sur vos serveurs de production en cours d'exécution ou la mise à jour d'un paramètre de configuration clé et le redémarrage de MySQL semble irréaliste et / ou surpuissant, essayez ceci:

CONVERT_TZ(NOW(), 'US/Pacific', 'UTC')

US/Pacific est le fuseau horaire de votre appel NOW() renvoie le temps.

La bonne façon de le faire est de changer le fuseau horaire de votre serveur à UTC, comme l'a dit MarkR.

Cependant, il est également possible d'utiliser SET time_zone pour changer le fuseau horaire de votre session en cours.

Dans le manuel:

  

Le réglage de l'heure de la session de zone affecte l'affichage et le stockage des valeurs de temps qui sont sensibles à la zone. Cela inclut les valeurs affichées par des fonctions telles que NOW () ou CURTIME ()

UTC_TIMESTAMP()

Renvoie la date UTC et l'heure actuelle en tant que valeur 'AAAA-MM-JJ hh: mm: ss. Ou au format YYYYMMDDhhmmss.uuuuuu, selon que la fonction est utilisée dans un contexte numérique ou chaîne

UTC_DATE()

Renvoie la date UTC actuelle en tant que valeur « AAAA-MM-JJ » ou YYYYMMDD, selon que la fonction est utilisée dans un contexte numérique ou chaîne.

UTC_TIME()

Renvoie l'heure UTC comme une valeur "hh: mm: ss. Ou format hhmmss.uuuuuu, selon que la fonction est utilisée dans un contexte numérique ou chaîne

Référence de MySQL: https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_utc-timestamp

Vous devrez utiliser l'instruction SET TIMESTAMP pour formater les résultats datetime dans le format souhaité. Cela signifie changer toutes ces requêtes. sysdate () n'obéit pas à ce bien.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top