1.1 Giả sử bạn đang phát triển một ứng dụng ở VN cho người dùng VN. Tuy nhiên server mysql được dựng tại Nga. Nhưng giữa Nga và VN lại khác nhau về time trong một ngày.
1.2 Vậy làm sao để ứng dụng của bạn vẫn có thể hoạt động đúng về mặt time nếu bạn duy chuyển server MySql từ Nga -> về -> VN
1.3 Vì lí do trên trong hệ CSDL của MySql định nghĩa 2 loại kiểu dữ liệu như sau
1.3.1 datetime
1.3.2 timestamp
Vấn đề khác giữa chúng cần đề cập ở đây là: chúng đều được sử dụng để lưu trữ ngày tháng, tuy nhiên điểm khác chính:
2.1 datetime: giá trị được lưu vào từ đầu là bao nhiêu thì sẽ được giữ đúng giá trị đó, và chỉ thay đổi khi người dùng thao tác cập nhật lại dữ liệu mới.
2.2 timestamp: giá trị thời gian được lưu trữ vào MySql căn cứ vào TimeZone của MySql server. Do đó, nếu dữ liệu ngày tháng đã được lưu trữ trước đó, nếu MySql server thay đổi TimeZone thì dữ liệu này được tự động thay đổi về TimeZone tương ứng.
CREATE TABLE `datetime_product` (
`id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
`name` VARCHAR(255) NOT NULL COLLATE 'utf8mb4_unicode_ci',
`text` VARCHAR(255) NULL DEFAULT NULL COLLATE 'utf8mb4_unicode_ci',
`date` DATETIME NULL DEFAULT NULL,
`created_at` TIMESTAMP NULL DEFAULT NULL,
`updated_at` TIMESTAMP NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
)
COLLATE='utf8mb4_unicode_ci'
ENGINE=InnoDB
AUTO_INCREMENT=1
;
INSERT INTO `datetime_product`
(`id`, `name`, `text`, `date`, `created_at`, `updated_at`)
VALUES (6, 'quoc2024-05-08 15:15:23', NULL, '2024-05-08 15:15:23',
'2024-05-08 15:15:23', '2024-05-08 15:15:23');
SHOW VARIABLES LIKE '%time_zone%';
SELECT * FROM datetime_product;
SET TIME_ZONE="-07:00";
SELECT id, `name`, `date`,
created_at, updated_at
FROM datetime_product;