2012-10-16 27 views
5

Dưới đây là câu lệnh CREATE TABLE dùng để tạo bảng của tôi:0000-00-00 00:00:00 nhập như MySQL DateTime

CREATE TABLE IF NOT EXISTS `data_received` (
`id` int(10) unsigned NOT NULL, 
`edit_time` datetime NOT NULL} 

Dưới đây là làm thế nào dữ liệu được lưu trong bảng nếu giá trị 'edit_time' là không được cung cấp:

id edit_time 
1 0000-00-00 00:00:00 

Bây giờ, nếu tôi thực hiện các tuyên bố sau:

tôi nhận được kết quả: NULL

Ai đó có thể giúp tôi hiểu điều gì đang xảy ra không?

Trả lời

4

Đó là vì 0000-00-00 00:00:00 không phải là biểu thức DATETIME hợp lệ được chấp nhận bởi hàm.

Vui lòng kiểm tra documentation.

2

Sử dụng phương pháp này để giữ cho chỉnh sửa thời gian trong mysql

`edit_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'Auto-update time' 
+0

Cảm ơn bạn đã trả lời. Bạn có thể giải thích cách các hàm "ON UPDATE CURRENT_TIMESTAMP" hoạt động không? –

+0

@ShahriarNKhondokar: Nếu bạn sử dụng câu lệnh UPDATE để sửa đổi dữ liệu trong một bảng, cột 'edit_time' sẽ được cập nhật vào thời điểm hiện tại, để bạn không cần chèn/cập nhật giá trị' edit_time' trực tiếp vào cơ sở dữ liệu. và giá trị 'edit_time' sẽ luôn hợp lệ. –

1

0000-00-00 00:00:00 lẽ sẽ hiểu là null. Và so sánh null trong một số TIMESTAMPDIFF sẽ dẫn đến kết quả null.

MySQL doc nói

Trong MySQL, ngày không được định nghĩa là '0000-00-00', mặc dù ngày này được coi là vô hiệu riêng của mình.

0

Không có 0 của zero trong năm không, vì vậy bạn không thể tính toán thời gian kể từ đó:

SELECT TIMESTAMPDIFF(HOUR, '0000-00-00 00:00:00', NOW()) 

NULL

Rõ ràng MySQL không có một vấn đề với năm 0 chính nó, vì điều này trả về kết quả:

SELECT TIMESTAMPDIFF(HOUR, '0000-01-01 00:00:00', NOW()) 
2

Mysql có xu hướng để chèn rác trong một nỗ lực để có "hữu ích". Tốt nhất để nói với nó không phải để làm điều đó bằng cách thiết lập mysql để chế độ STRICT vì vậy nó hoạt động giống như một cơ sở dữ liệu nên.

SET sql_mode='STRICT_ALL_TABLES' 

Để biết chi tiết, vui lòng đọc manual.