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.
Untuk mengatasi beberapa batasan jenis data DATETIME, anda boleh mengikuti strategi ini:
Untuk menyelesaikan isu DATETIME tidak mematuhi zon waktu, anda boleh menyeragamkan semua operasi temporal pada pangkalan data dan peringkat aplikasi untuk menggunakan UTC.
SET GLOBAL time_zone = '+00:00'; SET time_zone = '+00:00';
INSERT INTO example_table (event_time) VALUES (CONVERT_TZ('2024-06-19 12:30:00', 'Your/Timezone', '+00:00'));
SELECT CONVERT_TZ(event_time, '+00:00', 'Your/Timezone') as local_event_time FROM example_table;
Untuk mengemas kini nilai DATETIME secara automatik apabila baris diubah suai, anda boleh menggunakan pencetus.
CREATE TRIGGER before_update_example_table BEFORE UPDATE ON example_table FOR EACH ROW BEGIN SET NEW.updated_at = NOW(); END;
Untuk menetapkan nilai DATETIME secara automatik pada sisipan, anda boleh menetapkan nilai lalai menggunakan fungsi NOW().
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 );
Jika ketepatan masa yang lebih tinggi diperlukan, anda boleh menggunakan DATETIME(6) atau TIMESTAMP(6) untuk menyimpan masa sehingga 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) );
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.
// 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');
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!