2012-10-25 2 views
16

기존 데이터베이스에서 나이 열 (INT)을 가졌습니다. 이제 dob (DATETIME)로 설정해야합니다.phpmyadmin을 통한 MySQL 기본 datetime

나는 CURRENT_TIMESTAMP를 answer with 138 upvotes에 정의 된 기본값으로 지정하여 PHPMyAdmin을 통해 이렇게 시도합니다. 그러나 phpMyAdmin에 첨부 된 스크린 샷과 같이 #1067 - invalid default value for 'dob'을 불평 :

Error screenshot

누군가가 제안 주시겠습니까 내가 어떻게 문제를 해결하는 방법이 오류가 발생하고있어 그 이유는 무엇입니까?

+6

생년월일은 현재 시간을 기본값으로이 수 있는지 궁금하십니까? –

+0

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

+0

@Mithun. 그냥 임시 값. 나중에 다른 값으로 변경됩니다. –

답변

18

You can't set DATETIME의 기본값으로 CURRENT_TIMESTAMP.

하지만 TIMESTAMP로 처리 할 수 ​​있습니다.

차이점 here을 참조하십시오. this 블로그

데이터 타입 사양의 기본 값 절에서

단어는 컬럼에 대한 기본 값을 나타냅니다. 한 가지 예외를 제외하고는 기본값은 상수 여야합니다. 함수 나 표현식이 될 수 없습니다.

예를 들어 날짜 열의 기본값을 NOW() 또는 CURRENT_DATE와 같은 함수의 값으로 설정할 수 없다는 것을 의미합니다.

예외는 TIMESTAMP 열의 기본값으로 CURRENT_TIMESTAMP를 지정할 수 있다는 것입니다.

+0

감사합니다. 임시 값으로 null을 사용했습니다. 처음에는'not null'을 거쳐 현재 날짜를 기본값으로 사용하려고 시도했지만 가능하지 않은 것 같습니다. 일시적으로 null이 허용되어 작동했습니다. –

0

기본값 current_timeDATETIME 유형으로 유효하지 않으므로 해당 오류가 발생합니다. 그것이 그것이 말하는 것과 그것이 계속되고있는 것이다.

current_time을 사용할 수있는 유일한 필드는 타임 스탬프입니다.

2

나는 당신이 mysql 날짜로 그것을 달성 할 수 있다고 생각하지 않는다. 너무 TIMESTAMP로 필드의 유형을 설정

/************ 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

날짜 시간에 가장 좋은 방법은 트리거를 사용하는 것입니다 .. 타임 스탬프를 사용하거나이 방법을 시도해야합니다.

enter image description here

0

: 당신은

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