web-dev-qa-db-fra.com

Date et heure MySQL par défaut via phpmyadmin

Dans une base de données existante, j'ai la colonne age (INT). Maintenant, je dois le définir comme dob (DATETIME).

J'essaie de le faire par le biais de PHPMyAdmin, en donnant à CURRENT_TIMESTAMP la valeur par défaut définie par answer avec 138 votes positifs . Cependant, PHPMyAdmin se plaint de #1067 - invalid default value for 'dob' comme dans la capture d'écran ci-jointe:

Error screenshot

Quelqu'un peut-il s'il vous plaît suggérer pourquoi je reçois cette erreur et comment y remédier?

17
Kapil Sharma

Vous ne pouvez pas définir CURRENT_TIMESTAMP comme valeur par défaut avec DATETIME. 

Mais vous pouvez le faire avec TIMESTAMP.

Voyez la différence ici .

Mots de this blog

La clause de valeur DEFAULT dans une spécification de type de données indique une valeur par défaut pour une colonne. À une exception près, la valeur par défaut doit être une constante; ce ne peut pas être une fonction ou une expression.

Cela signifie, par exemple, que vous ne pouvez pas définir comme valeur par défaut pour une colonne de date la valeur d'une fonction telle que NOW () ou CURRENT_DATE. 

La seule exception est que vous pouvez spécifier CURRENT_TIMESTAMP en tant que valeur par défaut pour une colonne TIMESTAMP.

19
Mithun Sreedharan

Je ne pense pas que vous puissiez y arriver avec mysql date. Vous devez utiliser l'horodatage ou essayer cette approche.

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

La meilleure façon pour DateTime est d'utiliser un déclencheur:

/************ 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
Lucas Moyano Angelini

Définissez également le type du champ sur TIMESTAMP.

 enter image description here

0
Ashutosh Bajpai

Vous obtenez cette erreur car la valeur par défaut current_time n'est pas valide pour le type DATETIME. C'est ce que ça dit, et c'est ce qui se passe.

Le seul champ sur lequel vous pouvez utiliser current_time est un horodatage.

0
Nanne