Mam pole w tabeli MySQL, które ma timestamp
typ danych. Zapisuję dane w tej tabeli. Ale kiedy przekażę znacznik czasu ( 1299762201428
) do rekordu, automatycznie zapisuje wartość 0000-00-00 00:00:00
w tej tabeli.
Jak mogę przechowywać znacznik czasu w tabeli MySQL?
Oto moje INSERT
oświadczenie:
INSERT INTO table_name (id,d_id,l_id,connection,s_time,upload_items_count,download_items_count,t_time,status)
VALUES (1,5,9,'2',1299762201428,5,10,20,'1'),
(2,5,9,'2',1299762201428,5,10,20,'1')
php
mysql
database
sql-insert
gautamlakum
źródło
źródło
Odpowiedzi:
przejść w ten sposób
źródło
datetime
timestamp
varchar(15)
strtotime
. edit: btw, timestamp obejmuje tylko zakres wszystkich możliwych dat (myślę, że od 1970-01-01 do xx-xx-2032)Hej, użyj
FROM_UNIXTIME()
do tego funkcji.Lubię to:
źródło
date('Y-m-d H:i:s','1299762201428')
?FROM_UNIXTIME
zwraca natywny typ daty mysql, podczas gdy phpdate()
zwraca ciąg.źródło
Kilka rzeczy do wyjaśnienia:
Dlatego poprawna odpowiedź byłaby
źródło
Typ danych „ bigint unsigned ” może odpowiadać temu wymaganiu.
źródło
Domyślam się, że pole, w którym próbujesz zapisać wartość, jest polem daty i godziny . To nie jest, ale to samo wydaje się być prawdą w przypadku znaczników czasu . Jeśli tak, mysql oczekuje, że format będzie następujący: rok-miesiąc-dzień Godzina: minuta: sekunda. Aby zapisać znacznik czasu, będziesz musiał przekonwertować pole na numeryczne za pomocą zapytania takiego jak
Jeśli używasz aktualnego czasu, możesz użyć now () lub current_timestamp.
źródło
Możesz również użyć
now()
w swoim zapytaniu, tj .:Wykorzysta aktualny znacznik czasu.
źródło
Posługiwać się
FROM_UNIXTIME()
.Uwaga: 1299762201428 wygląda bardziej jak milisekundowy znacznik czasu (jak Date () * 1 w JavaScript) i prawdopodobnie musisz podzielić to przez 1000.
źródło
Sprawdź typ pola w tabeli, po prostu zapisz wartość znacznika czasu w typie danych, takim jak
bigint
itp.Nie
datetime
wpiszźródło
To powinno wystarczyć:
źródło
Jeśli znacznik czasu to aktualny czas, możesz użyć
NOW()
funkcji mysqlźródło
Użyj
datetime
typu pola. Ma wiele zalet, takich jak czytelność dla człowieka (nikt nie czyta znaczników czasu) i funkcje MySQL .Aby przekonwertować z uniksowego znacznika czasu, możesz użyć funkcji MySQL
FROM_UNIXTIME(1299762201428)
. Aby przekonwertować z powrotem można użyćUNIX_TIMESTAMP
:SELECT UNIX_TIMESTAMP(t_time) FROM table_name
.Oczywiście, jeśli nie podoba funkcji MySQL, zawsze można użyć PHP:
'INSERT INTO table_name SET t_time = ' . date('Y-m-d H:i:s', $unix_timestamp)
.źródło
timestamp
pola jest również czytelny dla człowieka (podczas używaniaSELECT
w konsoli). Są bardzo różne i obie mają swoje wady / zalety. Główna różnica polega na tym, jak obsługiwane są strefy czasowe.datetime
z różnych powodów. Jaka jest według Ciebie największa wada / zaleta?timestamp
: lepiej dopasowuje się do znaczników czasu PHP, ponieważ jest odporny na ustawienia strefy czasowej zarówno serwera, jak i klienta, natomiastdatetime
zmienia wyświetlaną wartość w zależności od strefy czasowej klienta MySQL (oczywiście zależy to od projektu, który jeden jest lepszy). największa wadatimestamp
: nie obsługuje wartości NULL i (nie wiem, co zrobili, kiedy to zaprogramowali)TIMESTAMP NOT NULL
pole staje sięTIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP
. W moim przypadku niestety muszę użyćTIMESTAMP
ze względów TZ.Lepiej jest użyć typu danych
varchar(15)
.źródło
Można to zrobić:
$date = \gmdate(\DATE_ISO8601);
.źródło
Jeśli wiem, że bazą danych jest MySQL, użyję funkcji NOW () w następujący sposób:
źródło