MySQL UTC dátum beszúrása

MySQL UTC dátum beszúrása
2021-07-01T13:23:42+02:00
2021-07-02T17:22:42+02:00
2022-10-15T21:16:23+02:00
*deleted_23419333
Sziasztok!

Van egy táblám:

CREATE TABLE `users` ( `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, `user_registered` DATETIME NOT NULL, ) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; INSERT INTO `users` ( `user_registered` ) VALUES ( '?' );

Hogyan tudnék úgy beszúrni egy sort, hogy a dátum UTC szerinti legyen? Illetve ha ilyet szeretnék, akkor a DATETIME vagy a TIMESTAMP a jobb választás?

Nem PHP kódot várok, hanem tisztán MySQL megoldást (INSERT INTO).
Mutasd a teljes hozzászólást!
Hali!

Hogyan tudnék úgy beszúrni egy sort, hogy a dátum UTC szerinti legyen? Illetve ha ilyet szeretnék, akkor a DATETIME vagy a TIMESTAMP a jobb választás?

Hogy mi a jobb választás? Az attól függ, hogy pontosan mit szeretnél, milyen igényeid vannak.

Gondolom, olvastad a MySQL dokumentáció dátum-típusokról írt részét. Érdekes lehet neked a 7. bekezdés: MySQL converts TIMESTAMP values from the current time zone to UTC for storage, and back from UTC to the current time zone for retrieval. (This does not occur for other types such as DATETIME.) By default, the current time zone for each connection is the server's time. The time zone can be set on a per-connection basis. As long as the time zone setting remains constant, you get back the same value you store. If you store a TIMESTAMP value, and then change the time zone and retrieve the value, the retrieved value is different from the value you stored. This occurs because the same time zone was not used for conversion in both directions. The current time zone is available as the value of the time_zone system variable. For more information, see Section 5.1.15, “MySQL Server Time Zone Support”.”

Mutasd a teljes hozzászólást!

  • Köszönöm a hozzászólást. Jól értem, hogy TIMESTAMP esetén mindig UTC-ként van tárolva a dátum és a MySQL szerver időzóna beállításától függ, hogy mit ír ki lekérdezéskor?

    Példával:

    Most (magyar idő) szerint 2021-07-01 15:19:56 van.
    UTC szerint 2021-07-01 13:19:56.
    A MySQL szerver time_zone változója: SYSTEM
    A system_time_zone változó: EDT
    Vagyis a szerver időzónája szerint: 2021-07-01 09:19:56

    Tábla:

    `CREATE TABLE `users` ( `id` bigint(20) UNSIGNED NOT NULL, `registered_utc` timestamp NOT NULL DEFAULT current_timestamp() ) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

    Beszúrás:

    INSERT INTO `users` ( `id` ) VALUES ( 1 );

    A beszúráskor phpMyAdmin-ban azt látom, hogy az 1. `id` sorában a `registered_utc` oszlop értéke 2021-07-01 09:19:56 lett.

    Csak azért látom ezt mert a system_time_zone értéke EDT, de amúgy UTC-ként van tárolva a dátum a táblában?

    Sajnos nem tudom megváltoztatni a time_zone és a system_time_zone változókat mert ezek korlátozva vannak, így nem tudom kipróbálni, hogy mit látnék, ha átírnám másra az EDT-t, de jól értelmezem az általad írtakat?
    Mutasd a teljes hozzászólást!
  • Hali!

    Jól értem, hogy TIMESTAMP esetén mindig UTC-ként van tárolva a dátum és a MySQL szerver időzóna beállításától függ, hogy mit ír ki lekérdezéskor?

    Jól érted. Ráadásul, mivel UTC-ben van tárolva a TIMESTAMP típusú mező értéke, ezért beíráskor is történik konverzió (szerver időzóna → UTC).

    Csak azért látom ezt mert a system_time_zone értéke EDT, de amúgy UTC-ként van tárolva a dátum a táblában?

    Igen.

    Sajnos nem tudom megváltoztatni a time_zone és a system_time_zone változókat mert ezek korlátozva vannak, így nem tudom kipróbálni, hogy mit látnék, ha átírnám másra az EDT-t…

    Az OK, hogy rendszerszinten is korlátozva vannak, de session-szinten sem tudod változtatni? Például:
    SET time_zone = 'Europe/Budapest'; SELECT * FROM `users`;
    Mutasd a teljes hozzászólást!
  • Ez működik:

    SET time_zone = 'Europe/Budapest'; SELECT * FROM `users`;

    Azt is megfigyeltem, hogy exportálásnál (phpMyAdmin-ból) van egy ilyen a fájl elején:

    SET time_zone = "+00:00";

    ... és természetesen minden TIMESTAMP dátum UTC szerinti a fájlban.

    Köszönök mindent.
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd