6
votes

MySQL deux colonne Timeestamp par défaut maintenant Erreur de valeur 1067

J'ai une table comme indiqué ci-dessous. Afin de travailler par défaut maintenant em> la restriction de colonne de MySQL, j'ai utilisé la pointe comme indiqué sur ici xxx pré>

My SQL_Mode n'inclut pas no_zero_date code> comme indiqué sur ICI My Sortie: P>

ERROR 1067 (42000) at line xx in file: '/myschema.sql': Invalid default value for 'create_date'


0 commentaires

4 Réponses :


12
votes

Vous ne pouvez avoir que one colonne d'horodatage par défaut sur actuel_timettamp ou maintenant () par table. Ceci est un bug bien connu dans MySQL.

Pour surmonter ceci, faites votre valeur par défaut pour la colonne créée une valeur horodatale valide, puis insérez l'horodatage dans votre code d'application CRUD. Utilisez NOW () ou CURCENT_TIMESTAMP pour votre colonne mise à jour Par défaut de la colonne.

Matériau de référence: http://dev.mysql.com/doc/refman/5.1/fr /timestamp.html

Pour illustrer davantage la lacune de MySQL dans cette zone, considérez le code suivant: xxx

la sortie de ceci affichera : xxx

Ceci est une bummer car l'utilisation d'une gâchette dans ce cas serait un bon travail autour.


6 commentaires

Ce n'est pas un bogue, il s'agit d'une fonctionnalité: "Pour une colonne d'horodatage dans une table, vous pouvez affecter l'horodatage actuel en tant que valeur par défaut et la valeur automatique de mise à jour. Il est possible d'avoir l'horodatage actuel la valeur par défaut pour Initialisation de la colonne, pour la valeur de mise à jour automatique, ou les deux. Il n'est pas possible d'avoir l'horodatage actuel la valeur par défaut pour une colonne et la valeur de mise à jour automatique d'une autre colonne. "


Le débat sur la question de savoir si c'est un «bogue» ou non, car cela est sérieusement ennuyeux. Pourquoi puis-je ne pas avoir deux colonnes horodatées avec une valeur par défaut de maintenant () avec la deuxième fois la mise à jour automatique de la colonne? La réponse est que MySQL ne le fait pas. Je n'appelle pas vraiment qu'une fonctionnalité.


Randy merci pour votre réponse. Je suis au courant du lien que vous avez fourni. Je cherche juste une solution de contournement. Cependant, il semble que toutes les astuces montrées sur Internet ne fonctionnent tout simplement pas.


Ce n'est pas une fonctionnalité qu'il est plutôt idiote. Il est tout à fait raisonnable d'avoir une colonne créée et une colonne mise à jour avec l'ancien étant fait défaut de la date d'insertion et de ce dernier étant mis à jour sur insertion ainsi que sur les mises à jour.


Cette restriction a été levé comme de mysql 5.6.5.


Merci pour la mise à jour, @david. Cela va être une fonctionnalité de GA très bienvenue!



7
votes

En fait, le code de Randy est cassé. Cela ne fonctionnera pas car c'est une gâchette mutation. Vous ne pouvez pas mettre à jour la table qui a initié la mise à jour. Par exemple, si vous mettez à jour les sessions de la table, vous ne pouvez pas utiliser la modification de la table dans votre déclencheur à l'aide d'une instruction UPDATE, INSERT ou DELETE. La seule façon dont vous êtes autorisé à modifier la table à laquelle le déclencheur est joint est d'utiliser les préfixes "nouveaux" ou "anciens" comme illustré ci-dessous. (Bien sûr, vous êtes autorisé à mettre à jour d'autres tables à volonté.) Voici un exemple de la façon de surmonter le problème décrit par l'OP.

create table sessions (
    id integer not null,
    created timestamp not null default 0,
    updated timestamp not null default 0
);

delimiter //
create trigger bifer_sessions_ts before insert on sessions for each row
begin
    set new.created = now();
    set new.updated = now();
end;
//
create trigger bufer_sessions_ts before update on sessions for each row
begin
    set new.updated = now();
end;
//
delimiter ;


0 commentaires

1
votes

Pour ce faire et le faire fonctionner:

col1 TIMESTAMP DEFAULT 0,

col2 TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 


0 commentaires

0
votes

L'horodatage par défaut n'est pas pris en charge dans MySQL avant les versions 5.6.1 dans la même table.

Après la version MySQL 5.6. + Il permet deux colonnes horodatées ou plus dans la même table.

Vous pouvez essayer de mettre à jour votre version MySQL


0 commentaires