J'ai deux colonnes dans les utilisateurs de table, à savoir registerDate and lastVisitDate
qui se composent du type de données datetime. Je voudrais faire ce qui suit.
- Définissez la valeur par défaut de registerDate sur MySQL NOW ()
- Définissez la valeur par défaut de lastVisitDate sur
0000-00-00 00:00:00
Au lieu de null qu'elle utilise par défaut.
Parce que la table existe déjà et a des enregistrements existants, je voudrais utiliser la table Modifier. J'ai essayé d'utiliser les deux morceaux de code ci-dessous, mais aucun ne fonctionne.
ALTER TABLE users MODIFY registerDate datetime DEFAULT NOW()
ALTER TABLE users MODIFY registerDate datetime DEFAULT CURRENT_TIMESTAMP;
Cela me donne une erreur: ERROR 1067 (42000): Invalid default value for 'registerDate'
Est-il possible pour moi de définir la valeur de datetime par défaut sur NOW () dans MySQL?
mysql
sql
datetime
mysql-error-1067
Ibrahim Azhar Armar
la source
la source
ALTER TABLE users MODIFY dateTime timestamp default CURRENT_TIMESTAMP
. Vous n'avez pas défini ledata type
champ dans vos deux effortsDATE
devrait fonctionner avec la valeur par défautNOW()
Réponses:
Depuis MySQL 5.6.5, vous pouvez utiliser le
DATETIME
type avec une valeur dynamique par défaut:Ou même combiner les deux règles:
Référence:
http://dev.mysql.com/doc/refman/5.7/en/timestamp-initialization.html
http://optimize-this.blogspot.com/2012/04/datetime-default-now-finally-available .html
Avant la version 5.6.5, vous devez utiliser le
TIMESTAMP
type de données, qui se met à jour automatiquement chaque fois que l'enregistrement est modifié. Malheureusement, cependant, un seulTIMESTAMP
champ mis à jour automatiquement peut exister par table.Voir: http://dev.mysql.com/doc/refman/5.1/en/create-table.html
Si vous souhaitez empêcher MySQL de mettre à jour la valeur d'horodatage
UPDATE
(de sorte qu'elle ne se déclenche queINSERT
), vous pouvez modifier la définition en:la source
DATETIME
est souvent préférable de faire la plage qu'il peut contenir: '1000-01-01 00:00:00' à '9999-12-31 23:59:59' par rapport àTIMESTAMPS
's' 1970-01-01 00: 00:01 'UTC à' 2038-01-19 03:14:07 'UTC. Dans le but de stocker des dates de naissance, ou quelque chose de plus de 30 ans dans le futur par exemple.timestamp
ce comportement à partir de MySQL 5.6J'utilise un déclencheur comme solution de contournement pour définir un champ datetime sur NOW () pour les nouvelles insertions:
cela devrait aussi fonctionner pour les mises à jour
Les réponses de Johan & Leonardo impliquent la conversion en un champ d'horodatage. Bien que cela soit probablement correct pour le cas d'utilisation présenté dans la question (stockage de RegisterDate et LastVisitDate), ce n'est pas une solution universelle. Voir la question datetime vs timestamp .
la source
use a timestamp
est une solution insensée si vous apprenez vraiment la différence entre ces deux types de données.Ma solution
la source
TIMESTAMP
colonne. Personne ne demandaitTIMESTAMP
...EUREKA !!!
Pour tous ceux qui ont perdu courage en essayant de définir une valeur DATETIME par défaut dans MySQL , je sais exactement ce que vous ressentez / ressentez. Voici donc:
Observez attentivement que je n'ai pas ajouté de guillemets simples / doubles entre le 0 .
Mise à jour importante :
Cette réponse a été publiée il y a longtemps. À l'époque, cela fonctionnait sur mon (probablement la dernière) installation de MySQL et j'avais envie de la partager. Veuillez lire les commentaires ci-dessous avant de décider d'utiliser cette solution maintenant.
la source
Les documents mysql 5.6 indiquent que CURRENT_TIMESTAMP peut être utilisé par défaut pour les types de données TIMESTAMP et DATETIME:
http://dev.mysql.com/doc/refman/5.6/en/timestamp-initialization.html
la source
Sur les versions mysql 5.6.5 et plus récentes, vous pouvez également utiliser des dates précises et définir des valeurs par défaut. Il y a cependant un bit subtil qui consiste à transmettre la valeur de précision à la fois à la date et à la fonction NOW ().
Cet exemple fonctionne:
Cet exemple ne fonctionne pas:
la source
Peut être utilisé pour mettre à jour l'horodatage lors de la mise à jour.
la source
La meilleure façon est d'utiliser "DEFAULT 0". Autre moyen:
la source
Cela a fonctionné pour moi, en utilisant MySQL:
la source
Enfin, cela a fonctionné pour moi!
la source
la source
Je ne sais pas si c'est toujours actif, mais c'est parti.
En ce qui concerne la définition des valeurs par défaut Now (), je ne pense pas que cela soit possible pour le type de données DATETIME. Si vous souhaitez utiliser ce type de données, définissez la date à laquelle vous effectuez l'insertion comme ceci:
Ma version de mySQL est 5.5
la source
INSERT INTO Yourtable (Field1, YourDateField) VALUES('val1', NOW())
Cela a fonctionné pour moi - juste changé INSERT en UPDATE pour ma table.
la source