2012-10-25 37 views
16

Trong cơ sở dữ liệu hiện có, tôi đã có cột tuổi (INT). Bây giờ tôi cần đặt nó là dob (DATETIME).Thời gian mặc định của MySQL thông qua phpmyadmin

Tôi thử làm như vậy thông qua PHPMyAdmin, cung cấp CURRENT_TIMESTAMP làm giá trị mặc định như được xác định bởi answer with 138 upvotes. Tuy nhiên PHPMyAdmin được phàn nàn #1067 - invalid default value for 'dob' như trong ảnh chụp màn hình kèm theo:

Error screenshot

Ai đó có thể xin đề nghị tại sao tôi nhận được lỗi đó và làm thế nào để khắc phục điều đó?

+6

Tự hỏi ngày sinh có thể có thời gian hiện tại làm giá trị mặc định? –

+0

[DATETIME Vs TIMESTAMP] (http://stackoverflow.com/questions/409286/datetime-vs-timestamp) –

+0

@Mithun. Chỉ giá trị tạm thời. sau đó sẽ thay đổi với các giá trị khác. –

Trả lời

18

You can't set CURRENT_TIMESTAMP làm giá trị mặc định với DATETIME.

Nhưng bạn có thể làm điều đó với TIMESTAMP.

Xem sự khác biệt here.

Words từ this blog của

Giá trị DEFAULT điều khoản trong một đặc tả kiểu dữ liệu chỉ ra một giá trị mặc định cho một cột. Với một ngoại lệ, giá trị mặc định phải là một hằng số; nó không thể là hàm hay biểu thức.

Điều này có nghĩa là, ví dụ: bạn không thể đặt giá trị mặc định cho cột ngày là giá trị của hàm như NOW() hoặc CURRENT_DATE.

Trường hợp ngoại lệ là bạn có thể chỉ định CURRENT_TIMESTAMP làm mặc định cho cột TIMESTAMP.

+0

Cảm ơn. Tôi đã sử dụng null làm giá trị tạm thời. Ban đầu tôi đã cố gắng để đi qua 'không null' và sử dụng ngày hiện tại là giá trị mặc định nhưng dường như nó là không thể. Được phép tạm thời null và nó hoạt động. –

0

Bạn nhận được lỗi đó vì giá trị mặc định current_time không hợp lệ đối với loại DATETIME. Đó là những gì nó nói, và đó là những gì đang xảy ra.

Trường duy nhất bạn có thể sử dụng current_time là dấu thời gian.

2

Tôi không nghĩ rằng bạn có thể đạt được điều đó với ngày mysql. Bạn phải sử dụng dấu thời gian hoặc thử phương pháp này ..

CREATE TRIGGER table_OnInsert BEFORE INSERT ON `DB`.`table` 
FOR EACH ROW SET NEW.dateColumn = IFNULL(NEW.dateColumn, NOW()); 
0

Cách tốt nhất cho DateTime là sử dụng một Trigger:

/************ ROLE ************/ 
drop table if exists `role`; 
create table `role` (
    `id_role` bigint(20) unsigned not null auto_increment, 
    `date_created` datetime, 
    `date_deleted` datetime, 
    `name` varchar(35) not null, 
    `description` text, 
    primary key (`id_role`) 
) comment=''; 

drop trigger if exists `role_date_created`; 
create trigger `role_date_created` before insert 
    on `role` 
    for each row 
    set new.`date_created` = now(); 
0

Đặt loại của lĩnh vực này như dấu thời gian quá.

enter image description here

Các vấn đề liên quan