MySQL: Menggunakan dan Meningkatkan `DATETIME` dan `TIMESTAMP`

王林
Lepaskan: 2024-07-19 12:40:08
asal
718 orang telah melayarinya

MySQL: Using and Enhancing `DATETIME` and `TIMESTAMP`

pengenalan

Dalam MySQL, DATETIME dan TIMESTAMP adalah jenis data yang biasa digunakan untuk menyimpan nilai temporal. Walaupun kedua-duanya berfungsi untuk tujuan menyimpan tarikh dan masa, terdapat perbezaan asas antara mereka yang mempengaruhi penggunaannya. Artikel ini akan meneroka perbezaan antara DATETIME dan TIMESTAMP dan cara mengatasi beberapa batasan DATETIME untuk memanfaatkan kelebihan TIMESTAMP.

Perbezaan Antara DATETIME dan TIMESTAMP

Julat:
  • DATETIME: Boleh menyimpan nilai dari '1000-01-01 00:00:00' hingga '9999-12-31 23:59:59'.
  • TIMESTAMP: Boleh menyimpan nilai dari '1970-01-01 00:00:01' hingga '2038-01-19 03:14:07'.
Storan:
  • DATETIME: Disimpan seperti sedia ada, dalam format tarikh dan masa, tanpa bergantung pada zon waktu. Ia memerlukan 8 bait storan.
  • TIMESTAMP: Disimpan sebagai integer yang mewakili bilangan saat sejak 1970-01-01 00:00:00 UTC. Ia memerlukan 4 bait storan.
Zon Waktu:
  • DATETIME: Tidak bergantung pada zon waktu dan menyimpan nilai sebagaimana adanya.
  • TIMESTAMP: Dijejaskan oleh zon waktu semasa pelayan MySQL. Apabila memasukkan atau mendapatkan semula nilai, nilai tersebut ditukar secara automatik antara waktu tempatan dan UTC.
Kemas Kini Automatik:
  • DATETIME: Tidak menyokong kemas kini automatik secara langsung apabila satu baris diubah suai.
  • TIMESTAMP: Boleh ditetapkan untuk mengemas kini nilai secara automatik apabila satu baris diubah suai menggunakan pilihan DEFAULT CURRENT_TIMESTAMP dan ON UPDATE CURRENT_TIMESTAMP.

Meningkatkan Penggunaan DATETIME

Untuk mengatasi beberapa batasan jenis data DATETIME, anda boleh mengikuti strategi ini:

1. Penyeragaman Zon Waktu

Untuk menyelesaikan isu DATETIME tidak mematuhi zon waktu, anda boleh menyeragamkan semua operasi temporal pada pangkalan data dan peringkat aplikasi untuk menggunakan UTC.

Menetapkan Pangkalan Data untuk Berfungsi dalam UTC:
SET GLOBAL time_zone = '+00:00';
SET time_zone = '+00:00';
Salin selepas log masuk
Menukar Nilai kepada UTC pada Sisipan:
INSERT INTO example_table (event_time) VALUES (CONVERT_TZ('2024-06-19 12:30:00', 'Your/Timezone', '+00:00'));
Salin selepas log masuk
Menukar Nilai daripada UTC kepada Waktu Setempat pada Pencapaian:
SELECT CONVERT_TZ(event_time, '+00:00', 'Your/Timezone') as local_event_time FROM example_table;
Salin selepas log masuk
2. Kemas Kini Automatik

Untuk mengemas kini nilai DATETIME secara automatik apabila baris diubah suai, anda boleh menggunakan pencetus.

Mencipta Pencetus untuk Mengemas kini Medan pada Pengubahsuaian:
CREATE TRIGGER before_update_example_table
BEFORE UPDATE ON example_table
FOR EACH ROW
BEGIN
  SET NEW.updated_at = NOW();
END;
Salin selepas log masuk
3. Menggunakan Nilai Lalai

Untuk menetapkan nilai DATETIME secara automatik pada sisipan, anda boleh menetapkan nilai lalai menggunakan fungsi NOW().

Menetapkan Medan Lalai:
CREATE TABLE example_table (
    id INT PRIMARY KEY AUTO_INCREMENT,
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
    updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
Salin selepas log masuk
4. Mengendalikan Ketepatan

Jika ketepatan masa yang lebih tinggi diperlukan, anda boleh menggunakan DATETIME(6) atau TIMESTAMP(6) untuk menyimpan masa sehingga ketepatan mikrosaat.

Mencipta Jadual dengan Ketepatan Mikrosaat:
CREATE TABLE example_table (
    id INT PRIMARY KEY AUTO_INCREMENT,
    created_at DATETIME(6) DEFAULT CURRENT_TIMESTAMP(6),
    updated_at DATETIME(6) DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6)
);
Salin selepas log masuk
5. Masa Pengendalian dalam Aplikasi

Pastikan aplikasi anda mengendalikan masa dengan betul dengan menukar semua masa kepada UTC sebelum menyimpannya dan menukarnya kembali kepada waktu tempatan apabila memaparkannya kepada pengguna.

Contoh dalam PHP:
// Setting the application time zone to UTC
date_default_timezone_set('UTC');

// Storing the current time as UTC
$current_time_utc = date('Y-m-d H:i:s');
$query = "INSERT INTO example_table (event_time) VALUES ('$current_time_utc')";

// Retrieving the time and converting it to local time
$event_time_utc = '2024-06-19 12:30:00';
$event_time_local = new DateTime($event_time_utc, new DateTimeZone('UTC'));
$event_time_local->setTimezone(new DateTimeZone('Your/Timezone'));
echo $event_time_local->format('Y-m-d H:i:s');
Salin selepas log masuk

Ringkasan

  • DATETIME: Digunakan untuk menyimpan tarikh dan masa tanpa kebergantungan zon waktu. Sesuai untuk acara akan datang atau penjadualan tetap.
  • TIMESTAMP: Digunakan untuk menjejak masa berbanding zon waktu semasa. Sesuai untuk mengelog masa apabila data dimasukkan atau dikemas kini.

Mempertingkatkan DATETIME

  • Menyeragamkan Zon Waktu: Gunakan UTC untuk menyeragamkan masa.
  • Kemas Kini Automatik: Gunakan pencetus untuk mengemas kini medan secara automatik.
  • Nilai Lalai: Tetapkan nilai lalai untuk medan DATETIME.
  • Ketepatan: Gunakan DATETIME(6) untuk ketepatan yang lebih tinggi.
  • Masa Pengendalian dalam Aplikasi: Tukar masa antara UTC dan waktu tempatan dengan betul.

Dengan mengikuti strategi ini, anda boleh memanfaatkan faedah TIMESTAMP semasa menggunakan DATETIME, menjadikannya lebih mudah untuk mengendalikan nilai temporal dengan cekap dan berkesan.

Atas ialah kandungan terperinci MySQL: Menggunakan dan Meningkatkan `DATETIME` dan `TIMESTAMP`. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:dev.to
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!