Comment définir une colonne d'horodatage dont la valeur par défaut est l'heure UTC actuelle?
MySQL utilise la UTC_TIMESTAMP()
fonction d'horodatage UTC:
mysql> SELECT UTC_TIMESTAMP();
+---------------------+
| UTC_TIMESTAMP() |
+---------------------+
| 2012-07-01 11:36:35 |
+---------------------+
1 row in set (0.00 sec)
Alors j'ai essayé:
CREATE TABLE `blah` (
`creation_time` TIMESTAMP DEFAULT UTC_TIMESTAMP,
...
Et d'autres variations, comme UTC_TIMESTAMP()
, mais sans succès.
CURRENT_TIMESTAMP
?MySQL converts TIMESTAMP values from the current time zone to UTC for storage, and back from UTC to the current time zone for retrieval.
CURRENT_TIMESTAMP
). De la même page de la documentation:(This does not occur for other types such as DATETIME.)
.Réponses:
Pour aller avec le commentaire de @ ypercube qui
CURRENT_TIMESTAMP
est stocké au format UTC mais récupéré comme fuseau horaire actuel, vous pouvez affecter le réglage du fuseau horaire de votre serveur avec l' option --default_time_zone pour la récupération. Cela permet à votre récupération d'être toujours en UTC.Par défaut, l'option "SYSTÈME" définit comment définir le fuseau horaire de votre système (qui peut ou non correspondre à l'heure UTC!):
Vous pouvez définir ceci dynamiquement:
Ou en permanence dans votre my.cnf:
Redémarrez votre serveur et vous verrez le changement:
la source
default_time_zone
pour une table ou une base de données spécifique? Merci.Vous ne pouvez pas spécifier
UTC_TIMESTAMP
par défaut de spécifier les propriétés automatiques. Utilisez uniquement les clauses DEFAULTCURRENT_TIMESTAMP
etON UPDATE CURRENT_TIMESTAMP
.Vous pouvez aussi INSERER des
UTC_TIMESTAMP
valeurs comme celle-ci pour une table:La requête INSERT ressemblerait à ceci pour insérer UTC_TImeSTAMP:
la source
Ma solution est avec un déclencheur:
Ensuite, chaque nouvelle ligne insérée aura l'horodatage en UTC.
la source
pour mariadb, seules les solutions globales my.cnf ont fonctionné
pour mariadb 10.2, la solution permanente de @Derek Downey dans ce billet.
pour mariadb 10.0 (j'avais 10.0.32), voir https://stackoverflow.com/questions/947299/how-do-i-make-mysqls-now-and-curdate-functions-use-utc
les deux définitions peuvent coexister dans mon.cnf de mariadb 10.2, mais je n'ai plus mariadb 10.0.
J'espère que ceci vous aidera.
la source