web-dev-qa-db-fra.com

CURRENT_DATE/CURDATE () ne fonctionne pas comme valeur DATE par défaut

Question assez simple ici, je pense que cela devrait marcher mais ça ne marche pas. Pourquoi pas

CREATE TABLE INVOICE(
   INVOICEDATE DATE NOT NULL DEFAULT CURRENT_DATE
)
30
inControl

Cela ne fonctionne pas car ce n'est pas supporté

La clause DEFAULT spécifie 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 la valeur par défaut pour une colonne de date comme valeur d'une fonction telle que NOW() ou CURRENT_DATE. La seule exception est que vous pouvez spécifier CURRENT_TIMESTAMP comme valeur par défaut pour une colonne TIMESTAMP

http://dev.mysql.com/doc/refman/5.5/fr/create-table.html

49
zerkms

déclarez votre colonne de date comme NOT NULL, mais sans valeur par défaut. Ajoutez ensuite ce déclencheur:

USE `ddb`;
DELIMITER $$
CREATE TRIGGER `default_date` BEFORE INSERT ON `dtable` FOR EACH ROW
if ( isnull(new.query_date) ) then
 set new.query_date=curdate();
end if;
$$
delimiter ;
21
user3630264
create table the_easy_way(
  capture_ts DATETIME DEFAULT CURRENT_TIMESTAMP,
  capture_dt DATE AS (DATE(capture_ts))
)

(MySQL 5.7)

4
Brian Purgert

Comme l’indique correctement l’autre réponse, vous ne pouvez pas utiliser les fonctions dynamiques comme valeur par défaut. Vous pouvez utiliser TIMESTAMP avec l'attribut CURRENT_TIMESTAMP, mais ce n'est pas toujours possible, par exemple si vous souhaitez conserver un horodatage creation et updated, et vous aurez besoin de la seule colonne autorisée TIMESTAMP pour seconde.

Dans ce cas, utilisez plutôt un déclencheur .

2
Niels Keurentjes

Selon cette documentation , à partir de MySQL 8.0.13, vous pourrez spécifier:

CREATE TABLE INVOICE(
    INVOICEDATE DATE DEFAULT (CURRENT_DATE)
)

Malheureusement, cette version n’a pas encore été publiée à ce jour. Vous pouvez vérifier ici pour les dernières mises à jour.

0
Amos Long

----- 2016-07-04 MariaDB 10.2.1 - Notes de publication - -----

Prise en charge de DEFAULT avec les expressions ( MDEV-10134 ).

----- 2018-10-22 8.0.13 Disponibilité générale - - -----

MySQL prend désormais en charge l'utilisation d'expressions en tant que valeurs par défaut dans les spécifications de type de données. Cela inclut l'utilisation d'expressions en tant que valeurs par défaut pour les types de données BLOB , TEXT , GEOMETRY et _SON_JSON , qui ne pouvaient auparavant pas se voir attribuer de valeurs par défaut . Pour plus de détails, voir Type de données Valeurs par défaut

0
Rick James