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.
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.
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').
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;
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.
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 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.
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 !
0 votes
Il s'agit de la fonction now(), sinon vous pouvez utiliser les paramètres par défaut au niveau des colonnes.