1046 votes

Comment définir une valeur par défaut pour une colonne MySQL de type datetime ?

Comment définir une valeur par défaut pour une colonne MySQL de type datetime ?

Dans SQL Server, c'est getdate() . Quel est l'équivalent pour MySQL ? J'utilise MySQL 5.x, si c'est un facteur.

7 votes

J'utilise CURRENT_TIMESTAMP dans ma table mysql (pas dans la requête), peut-être que cela peut être utile aussi.

19 votes

Cette fonctionnalité a maintenant été ajoutée à MySQL 5.6.5. J'espère que cela aidera quelqu'un. optimize-this.blogspot.co.uk/2012/04/

0 votes

@GhostInTheSecureShell toute une mission pour l'installer, au moins sur Debian, mais définitivement une fonctionnalité géniale. Je pense qu'un jour toutes ces questions "deux CURRENT_TIMESTAMP" seront résolues !

11voto

KernelM Points 3234

Vous pouvez utiliser now() pour définir la valeur d'une colonne de type date, mais gardez à l'esprit que vous ne pouvez pas l'utiliser comme valeur par défaut.

11voto

Evhz Points 3279

J'utilise MySql Server 5.7.11 et cette phrase :

ALTER TABLE table_name CHANGE date_column datetime NOT NULL DEFAULT '0000-00-00 00:00:00'

est no de travail. Mais ce qui suit :

ALTER TABLE table_name CHANGE date_column datetime NOT NULL DEFAULT '1000-01-01 00:00:00'

fonctionne juste .

En tant que sidenote Il est mentionné dans le docs mysql :

Le type DATE est utilisé pour les valeurs comportant une partie date mais pas de partie heure. MySQL récupère et affiche les valeurs DATE au format 'YYYY-MM-DD'. La plage prise en charge va de '1000-01-01' à '9999-12-31'.

même s'ils disent aussi :

Les valeurs DATE, DATETIME ou TIMESTAMP non valides sont converties en la valeur "zéro" du type approprié ('0000-00-00' ou '0000-00-00 00:00:00').

10voto

Gvs Akhil Points 791

Fonctionne bien avec MySQL 8.x

CREATE TABLE `users` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `dateCreated` datetime DEFAULT CURRENT_TIMESTAMP,
      `dateUpdated` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
      PRIMARY KEY (`id`),
      UNIQUE KEY `mobile_UNIQUE` (`mobile`)
    ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

9voto

Fabian Points 871

Pour tous ceux qui utilisent la colonne TIMESTAMP comme solution, je voudrais souligner la limitation suivante du manuel :

http://dev.mysql.com/doc/refman/5.0/en/datetime.html

"Le type de données TIMESTAMP est compris entre '1970-01-01 00:00:01' UTC et '1970-01-01 00:00:01' UTC. 2038-01-19 03:14:07 UTC. Ses propriétés varient en fonction de la version de MySQL et du mode SQL utilisé par le serveur. Ces propriétés sont décrites plus loin dans cette section. "

Cela va donc évidemment casser votre logiciel dans environ 28 ans.

Je pense que la seule solution du côté de la base de données est d'utiliser des déclencheurs comme mentionné dans d'autres réponses.

8voto

Drawin Kumar Points 31

Lors de la définition de triggers multi-lignes, il faut changer le délimiteur car le point-virgule sera considéré par le compilateur MySQL comme la fin du trigger et générera une erreur. Par exemple

DELIMITER //
CREATE TRIGGER `MyTable_UPDATE` BEFORE UPDATE ON `MyTable`
FOR EACH ROW BEGIN
        -- Set the udpate date
    Set new.UpdateDate = now();
END//
DELIMITER ;

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X