Devrait MySQL avoir son fuseau horaire défini à l'UTC?
Question de suivi de
https://serverfault.com/questions/191331/should-servers-have-their-timezone-set-to-gmt-utc
Devrait MySQL timezone être réglée sur UTC ou devrait-il être défini pour être le même fuseau horaire que le serveur ou PHP est réglé? (Si ce n'est UTC)
Quels sont les avantages et les inconvénients?
- stackoverflow.com/a/1650406/175071 des actions de bonnes raisons pour l'utilisation de l'UTC
- L'UTC n'est pas un fuseau horaire. L'UTC est une norme, GMT est un fuseau horaire. zachholman.com/talk/utc-is-enough-for-everyone-right
Vous devez vous connecter pour publier un commentaire.
Il semble que n'importe quel fuseau horaire est sur le serveur tant que vous avez le temps de le mettre à droite pour le fuseau horaire actuel, savoir le fuseau horaire de colonnes datetime que vous stockez, et sont conscients des problèmes avec l'heure avancée.
D'autre part, si vous avez le contrôle des fuseaux horaires de l'serveurs avec qui vous travaillez, alors vous pouvez avoir tout mis à l'UTC en interne et ne vous inquiétez pas sur les fuseaux horaires et l'heure d'été.
Voici quelques notes que j'ai recueillies de la façon de travailler avec les fuseaux horaires comme une forme de triche pour moi et pour les autres qui pourraient influer sur quel fuseau horaire, la personne va choisir pour son serveur et comment il/elle va stocker la date et l'heure.
MySQL Fuseau Horaire Triche
Notes:
timestamp, mais il faudra sélectionner un autre type datetime de
les colonnes timestamp
être ajouté au hasard, avec 6 mois de préavis, en raison du ralentissement de
les terres de rotation
GMT confond secondes, c'est pourquoi l'UTC a été inventé.
Avertissement! régionaux différents fuseaux horaires pourrait produire la même valeur datetime en raison
à l'heure d'été
En interne une Colonne de type timestamp MySQL est stockée en tant que UTC mais
lors de la sélection d'une date MySQL convertit automatiquement à l'
session en cours fuseau horaire.
Lors du stockage d'une date en timestamp, MySQL suppose que la date
est dans le courant de la session de fuseau horaire et de le convertir à l'UTC pour
le stockage.
"2013-00-00 04:00:00"
NUL, sauf si vous définissez la colonne autoriser les valeurs null lorsque vous
créer.
Pour sélectionner une colonne de type timestamp au format UTC
n'importe quel fuseau horaire de l'actuelle session de MySQL est:
Vous pouvez également configurer le serveur ou mondiale, ou de la session en cours fuseau horaire UTC, puis sélectionnez le timestamp de la sorte:
Pour sélectionner le courant datetime au format UTC:
Exemple de résultat:
2015-03-24 17:02:41
Pour sélectionner le courant datetime dans la session fuseau horaire
Pour sélectionner le fuseau horaire qui a été défini lorsque le serveur lancé
Renvoie "MSK" ou "+04:00", heure de Moscou, par exemple, il est (ou a été) une base de données MySQL d'un bug où les si la valeur est numérique, offset, il ne serait pas régler l'heure d'été
Pour obtenir le fuseau horaire actuel
Il sera de retour 02:00:00 si votre fuseau horaire est de +2:00.
Pour obtenir le timestamp UNIX actuel (en secondes):
Pour obtenir la colonne timestamp UNIX timestamp
Pour obtenir un UTC colonne datetime comme un timestamp UNIX
Obtenir un fuseau horaire actuel datetime à partir d'un positif timestamp UNIX entier
Obtenir un UTC datetime à partir d'un timestamp UNIX
Obtenir un fuseau horaire actuel datetime à partir d'un négatif timestamp UNIX entier
Il y a 3 endroits où le fuseau horaire peut être définie dans MySQL:
Remarque: Un fuseau horaire peut être réglé en 2 formats:
dans le fichier "my.cnf"
ou
@@global.time_zone variable
Pour voir quelle valeur ils sont
Pour définir une valeur pour utiliser un:
@@session.time_zone variable
À définir utiliser un:
à la fois "@@global.time_zone variable" et "@@session.time_zone variable" pourrait revenir "SYSTÈME", ce qui signifie qu'ils utilisent le fuseau horaire défini dans "mon.cnf".
Pour les noms de fuseau horaire de travail (même pour défaut de temps de la zone de), vous devez configurer votre fuseau horaire tableaux de renseignements doivent être remplis: http://dev.mysql.com/doc/refman/5.1/en/time-zone-support.html
Remarque: vous ne pouvez pas faire cela, car il sera de retour NULL:
D'installation de mysql fuseau horaire tables
Pour
CONVERT_TZ
de travail, vous devez le fuseau horaire tables à être peupléeSi elles sont vides, puis les remplir par l'exécution de cette commande
si cette commande vous donne le message d'erreur "données trop long pour la colonne 'abréviation" à la ligne 1", alors il peut être causé par un caractère NULL être ajouté à la fin de l'abréviation du fuseau horaire
le correctif en cours pour exécuter cette
(assurez-vous que votre serveurs règles d'heure d'été jusqu'à ce jour
zdump -v Europe/Moscow | grep 2011
https://chrisjean.com/updating-daylight-saving-time-on-linux/)Voir l'intégralité de l'heure d'été (Daylight Saving Time) de transition historique pour chaque fuseau horaire
CONVERT_TZ
s'applique également nécessaires des modifications d'heure d'été sur la base des règles dans les tableaux ci-dessus et la date que vous utilisez.Remarque:
Selon le docs, la valeur définie pour time_zone ne change pas, si vous le définissez comme "+01:00" par exemple, alors le time_zone sera défini comme un décalage de l'heure UTC, qui ne suivent pas l'heure d'été, donc il va rester le même tout au long de l'année.
Uniquement le nom fuseaux horaires va changer de temps au cours de l'heure d'été.
Abréviations comme
CET
sera toujours un temps d'hiver, etCEST
sera l'heure d'été alors que +01:00 sera toujoursUTC
+ 1 heure, et les deux ne changera pas avec l'heure d'été.La
system
fuseau horaire sera le fuseau horaire de la machine hôte sur laquelle mysql est installé (à moins que mysql ne parvient pas à déterminer)Vous pouvez lire plus sur l'utilisation de l'heure d'été ici
questions connexes:
Sources:
table
ensemblemodified
= '2016-07-07 08:10 +00:00'UNIX_TIMESTAMP(NOW());
ainsi que toutes vos utilisations deCONVERT_TZ()
où l'un des paramètres est `@@session.time_zone. Fiable de conversion UTC datetimes à des timestamps UNIX, vous avez essentiellement pour définir la session time_zone premier.PHP et MySQL ont leur propre fuseau horaire par défaut de configuration. Vous devez synchroniser l'heure entre votre base de données et d'applications web, sinon vous pouvez exécuter quelques questions.
Lire ce tutoriel: Comment Synchroniser Votre PHP et MySQL fuseaux horaires
date_default_timezone_set("America/Los_Angeles");
etmysql_query("SET time_zone='" . date('P', time()) . "'");
Travaillé avec beaucoup d'élégance!C'est un exemple de travail:
Les avantages et les inconvénients sont à peu près identiques.Cela dépend si vous voulez ou non.
Attention, si MySQL fuseau horaire diffère de l'heure de votre système (par exemple PHP), en comparant le temps ou l'impression à l'utilisateur va impliquer quelques retouches.