Saya memiliki kolom di tabel MySQL yang memiliki timestamp
tipe data. Saya menyimpan data ke dalam tabel itu. Tetapi ketika saya meneruskan timestamp ( 1299762201428
) ke record, secara otomatis menyimpan nilai 0000-00-00 00:00:00
ke dalam tabel itu.
Bagaimana cara menyimpan stempel waktu di tabel MySQL?
Ini INSERT
pernyataan saya :
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
sumber
sumber
Jawaban:
lulus seperti ini
sumber
datetime
, jika anda ingin mengubahnyatimestamp
maka ganti jenis kolomnya menjadivarchar(15)
strtotime
. sunting: btw, cap waktu hanya mencakup rentang dari semua kemungkinan tanggal (1970-01-01 hingga xx-xx-2032 menurut saya)Halo, gunakan
FROM_UNIXTIME()
fungsi untuk ini.Seperti ini:
sumber
date('Y-m-d H:i:s','1299762201428')
?FROM_UNIXTIME
menghasilkan tipe tanggal mysql asli sementara phpdate()
mengembalikan string.sumber
Beberapa hal yang perlu diperjelas:
oleh karena itu jawaban yang benar adalah
sumber
Jenis data ' bigint unsigned ' mungkin sesuai dengan persyaratan ini.
sumber
Saya menduga bahwa bidang yang Anda coba simpan nilainya adalah bidang waktu dan waktu itu tidak tetapi tampaknya sama berlaku untuk stempel waktu . Jika demikian mysql mengharapkan formatnya menjadi Tahun-bulan-hari Jam: menit: detik. Untuk menyimpan stempel waktu Anda harus mengubah bidang menjadi numerik menggunakan kueri seperti
Jika Anda menggunakan waktu saat ini, Anda dapat menggunakan now () atau current_timestamp.
sumber
Anda juga dapat menggunakan
now()
kueri Anda, yaitu:Ini akan menggunakan stempel waktu saat ini.
sumber
Gunakan
FROM_UNIXTIME()
.Catatan: 1299762201428 lebih terlihat seperti stempel waktu milidetik (seperti Date () * 1 di JavaScript), dan Anda mungkin harus membaginya dengan 1000.
sumber
Periksa jenis bidang dalam tabel, cukup simpan nilai cap waktu dalam jenis data seperti
bigint
dll.Bukan
datetime
tipesumber
Ini harus melakukannya:
sumber
Jika stempel waktu adalah waktu saat ini, Anda dapat menggunakan
NOW()
fungsi mysqlsumber
Gunakan
datetime
tipe bidang. Muncul dengan banyak keuntungan seperti keterbacaan manusia (tidak ada yang membaca cap waktu) dan fungsi MySQL .Untuk mengonversi dari stempel waktu unix, Anda dapat menggunakan fungsi MySQL
FROM_UNIXTIME(1299762201428)
. Untuk mengkonversi kembali Anda dapat menggunakanUNIX_TIMESTAMP
:SELECT UNIX_TIMESTAMP(t_time) FROM table_name
.Tentu saja, jika Anda tidak menyukai fungsi MySQL, Anda bisa selalu menggunakan PHP:
'INSERT INTO table_name SET t_time = ' . date('Y-m-d H:i:s', $unix_timestamp)
.sumber
timestamp
jenis lapangan adalah dibaca manusia juga (bila menggunakanSELECT
di konsol). Mereka sangat berbeda dan keduanya memiliki kekurangan / kelebihan. Perbedaan utamanya adalah bagaimana zona waktu ditangani.datetime
karena berbagai alasan. Apa kerugian / keuntungan terbesar menurut Anda?timestamp
: lebih cocok dengan cap waktu PHP karena kebal terhadap pengaturan zona waktu server dan klien, sedangkandatetime
perubahan nilai yang ditampilkan tergantung pada zona waktu klien MySQL Anda (tentu saja itu tergantung pada proyek Anda, yang mana satu lebih baik). kerugian terbesar untuktimestamp
: tidak mendukung nilai NULL dan (saya tidak tahu apa yang mereka merokok ketika mereka memprogram ini) sebuahTIMESTAMP NOT NULL
field menjadi aTIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP
. Dalam kasus saya, sayangnya saya perlu menggunakanTIMESTAMP
karena alasan TZ.Lebih baik menggunakan tipe data
varchar(15)
.sumber
Anda dapat melakukan:
$date = \gmdate(\DATE_ISO8601);
.sumber
Jika saya tahu database-nya adalah MySQL, saya akan menggunakan fungsi NOW () seperti ini:
sumber