Utiliser CURRENT_TIMESTAMP par défaut dans MySQL

Habdul Hazeez 15 février 2024
  1. Reproduire l’erreur lors de l’utilisation de CURRENT_TIMESTAMP comme DEFAULT dans MySQL
  2. Réorganisez les colonnes de la table pour utiliser CURRENT_TIMESTAMP comme DEFAULT dans MySQL
  3. Utilisez DEFAULT 0 pour utiliser CURRENT_TIMESTAMP comme DEFAULT dans MySQL
  4. Utilisez une valeur de temps pour utiliser CURRENT_TIMESTAMP comme DEFAULT dans MySQL
Utiliser CURRENT_TIMESTAMP par défaut dans MySQL

Cet article vous apprend à utiliser CURRENT_TIMESTAMP comme DEFAULT dans les versions MySQL inférieures à 5.6.5. En conséquence, vous pouvez empêcher l’erreur MySQL 1293.

Nos méthodes incluent la réorganisation des colonnes du tableau et l’utilisation de DEFAULT 0 et d’une valeur temporelle.

Reproduire l’erreur lors de l’utilisation de CURRENT_TIMESTAMP comme DEFAULT dans MySQL

Reproduisons l’erreur avant de vous montrer comment utiliser CURRENT_TIMESTAMP comme DEFAULT. C’est l’erreur que vous obtiendrez lorsque vous essayez d’utiliser CURRENT_TIMESTAMP comme DEFAULT.

Pour suivre, procédez comme suit :

  • Téléchargez la version de MySQL inférieure à 5.6.5. Vous l’obtiendrez dans le cadre de XAMPP 1.8.0, ou d’autres moyens.
  • Ouvrez MySQL dans XAMPP, connectez-vous avec mysql -u root -p. Vous remarquerez que la version de MySQL est 5.5.2a, elle est donc inférieure à 5.6.5.
  • Créez une base de données nommée just_a_test_db.

Maintenant, utilisez le SQL suivant pour créer une table site_users dans la base de données :

CREATE TABLE site_users (
    user_id INT NOT NULL AUTO_INCREMENT,
    username VARCHAR(255) NOT NULL UNIQUE,
    user_firstname VARCHAR(255) NOT NULL,
    user_surname VARCHAR(255) NOT NULL,
    user_email_address VARCHAR(255) NOT NULL UNIQUE,
    user_password CHAR(40) NOT NULL,
    is_active BOOL NOT NULL DEFAULT FALSE,
    is_validated BOOL NOT NULL DEFAULT FALSE,
    date_validated TIMESTAMP,
    date_registered TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (user_id)
) Engine=InnoDB;

Vous obtiendrez une erreur comme indiqué dans l’image suivante :

Erreur MySQL 1293 dans MySQL 5.5.25a

Réorganisez les colonnes de la table pour utiliser CURRENT_TIMESTAMP comme DEFAULT dans MySQL

Vous pouvez utiliser CURRENT_TIMESTAMP comme DEFAULT si vous réorganisez les colonnes de la table dans votre requête SQL. La colonne avec un CURRENT_TIMESTAMP comme DEFAULT doit venir en premier ; d’autres colonnes avec des valeurs TIMESTAMP doivent suivre.

Dans le SQL suivant, nous avons réorganisé le SQL et MySQL crée la table :

CREATE TABLE site_users (
    user_id INT NOT NULL AUTO_INCREMENT,
    username VARCHAR(255) NOT NULL UNIQUE,
    user_firstname VARCHAR(255) NOT NULL,
    user_surname VARCHAR(255) NOT NULL,
    user_email_address VARCHAR(255) NOT NULL UNIQUE,
    user_password CHAR(40) NOT NULL,
    is_active BOOL NOT NULL DEFAULT FALSE,
    is_validated BOOL NOT NULL DEFAULT FALSE,
    date_registered TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    date_validated TIMESTAMP,
    PRIMARY KEY (user_id)
) Engine=InnoDB;

Sortie dans la console MySQL :

Table de base de données créée avec succès après la réorganisation des colonnes de la table

Utilisez DEFAULT 0 pour utiliser CURRENT_TIMESTAMP comme DEFAULT dans MySQL

L’utilisation de DEFAULT 0 est une autre option qui vous permettra d’utiliser CURRENT_TIMESTAMP comme DEFAULT. Vous l’appliquerez aux colonnes TIMESTAMP qui n’ont pas de valeur par défaut.

De notre SQL, il s’agit de la colonne date_validated. Le SQL suivant vous montre comment procéder :

CREATE TABLE site_users_2 (
    user_id INT NOT NULL AUTO_INCREMENT,
    username VARCHAR(255) NOT NULL UNIQUE,
    user_firstname VARCHAR(255) NOT NULL,
    user_surname VARCHAR(255) NOT NULL,
    user_email_address VARCHAR(255) NOT NULL UNIQUE,
    user_password CHAR(40) NOT NULL,
    is_active BOOL NOT NULL DEFAULT FALSE,
    is_validated BOOL NOT NULL DEFAULT FALSE,
    date_validated TIMESTAMP NOT NULL DEFAULT 0,
    date_registered TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (user_id)
) Engine=InnoDB;

Sortie dans la console MySQL :

Utilisation de DEFAULT 0 sur une colonne TIMESTAMP dans MySQL 5.5.25a

Utilisez une valeur de temps pour utiliser CURRENT_TIMESTAMP comme DEFAULT dans MySQL

Si la valeur par défaut de TIMESTAMP est une heure, vous pouvez utiliser CURRENT_TIMESTAMP comme DEFAULT sur d’autres colonnes. Cette valeur de temps est 0000-00-00 00:00:00, et nous l’avons utilisée dans la colonne date_validated.

Le SQL suivant le montre en action :

CREATE TABLE site_users_3 (
    user_id INT NOT NULL AUTO_INCREMENT,
    username VARCHAR(255) NOT NULL UNIQUE,
    user_firstname VARCHAR(255) NOT NULL,
    user_surname VARCHAR(255) NOT NULL,
    user_email_address VARCHAR(255) NOT NULL UNIQUE,
    user_password CHAR(40) NOT NULL,
    is_active BOOL NOT NULL DEFAULT FALSE,
    is_validated BOOL NOT NULL DEFAULT FALSE,
    date_validated TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00',
    date_registered TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (user_id)
) Engine=InnoDB;

Sortie dans la console MySQL :

Utilisation d’une valeur temporelle pour une colonne TIMESTAMP dans MySQL 5.5.25a

Habdul Hazeez avatar Habdul Hazeez avatar

Habdul Hazeez is a technical writer with amazing research skills. He can connect the dots, and make sense of data that are scattered across different media.

LinkedIn

Article connexe - MySQL Timestamp