Autor | Zpráva | ||
---|---|---|---|
Lukáš1 Profil * |
#1 · Zasláno: 17. 3. 2014, 13:02:00
Zdravím,
dělám web pro lidi z více časových pásem a abych předešel problémům se špatným časem, rozhodl jsem se ukládat do MySQL DB všechny události v UTC. Tedy nehledě na to, jestli někdo píše z USA nebo z ČR, uložím čas v UTC a až při načítání času řeším převod do toho časového pásma, ve kterém je aktuální návštěvník. Předpokládám, že asi nic lepšího nevymyslím - nebo má někdo jiný nápad jak to řešit? Problém je ale v tom, že používám u některých DB tabulek výchozí hodnotu CURRENT_TIMESTAMP a rád bych aby tato "funkce" vracela čas v UTC. Stejně tak samozřejmě potřebuji aby všechny časové funkce vracely čas v UTC. Nechci ale časové pásmo na UTC nastavit pro celý MySQL server, ale pouze pro ten jeden web. Zkoušel jsem to řešit takto: mysql_query('SET time_zone = "+00:00"'); i takto: mysql_query('SET SESSION time_zone = "+00:00"'); Ale při ukládání do tabulky s CURRENT_TIMESTAMP se pořád ukládá čas v mém (SYSTEM) časovém pásmu. Kde dělám chybu? Jak mám tento problém řešit? |
||
Kajman Profil |
#2 · Zasláno: 17. 3. 2014, 13:19:05
A spoušíte ten příkaz k nastavení tz po každém connectu?
|
||
Lukáš1 Profil * |
#3 · Zasláno: 17. 3. 2014, 15:27:56 · Upravil/a: Lukáš1
Ano, mám inicializační soubor, který je volán každým scriptem. V něm je samotné připojení k MySQL DB a hned pod tím tento SQL.
Z toho co píšete tuším, že to co popisuji je správný postup. Tak že bych měl jen někde chybu? :D Teď jsem zkoušel: SELECT CURRENT_TIMESTAMP() Pokud mám u toho sloupce ON UPDATE CURRENT_TIMESTAMP , tak se taky při updatu vkládá lokální čas.
|
||
Lukáš1 Profil * |
#4 · Zasláno: 18. 3. 2014, 00:13:39
Tak teď už jsem zmaten úplně :D
Zjistil jsem, že když dám ten SQL dotaz: SET time_zone = "+00:00" A pod ním zavolám dotaz: UTC_TIMESTAMP() Tak mi i tato funkce vrazí lokální čas! :O Když SET time_zone nenastavím, tak funkce UTC_TIMESTAMP() vrací UTC čas.
|
||
Kajman Profil |
#5 · Zasláno: 18. 3. 2014, 08:00:58
Ještě může být špatně nastavená časová zóna přímo na tom serveru. Zkuste kontaktovat podporu, takhle by se to chovat nemělo.
|
||
Lukáš1 Profil * |
#6 · Zasláno: 18. 3. 2014, 09:46:58
No - kterou podporu? Toto co popisuji, se děje na mém lokále (MySQL 4.1.2).
Teď jsem to zkoušel ještě na svém serveru (stejná verze MySQL): print_r(mysql_fetch_assoc(mysql_query('SELECT CURRENT_TIMESTAMP()'))); mysql_query('INSERT INTO test VALUES ()'); mysql_query('SET SESSION time_zone = "+00:00"'); print_r(mysql_fetch_assoc(mysql_query('SELECT CURRENT_TIMESTAMP()'))); mysql_query('INSERT INTO test VALUES ()'); A chová se to o něco lépe, ale skoro stejně blbě. Výpis CURRENT_TIMESTAMP() se chová dle očekávání - tedy před změnou pásma lokální čas a po změně UTC.
v testovací tabulce se ale pomocí DEFAULT CURRENT_TIMESTAMP vždy vložil lokální čas. Tzn. zatím stejné chování.
Když ale volám před a po změně pásma funkci UTC_TIMESTAMP() , tak mě v obou případeh vrací UTC čas - zde je to zlepšení.
|
||
Časová prodleva: 10 let
|
0