MySQL のデフォルトとして CURRENT_TIMESTAMP を使用する

Habdul Hazeez 2023年1月30日
  1. MySQL で CURRENT_TIMESTAMPDEFAULT として使用した場合のエラーを再現する
  2. MySQL で CURRENT_TIMESTAMPDEFAULT として使用するようにテーブル列を並べ替えます
  3. MySQL で DEFAULT 0 を使って CURRENT_TIMESTAMPDEFAULT として使用する
  4. MySQL で時間値を使用して CURRENT_TIMESTAMPDEFAULT として使用する
MySQL のデフォルトとして CURRENT_TIMESTAMP を使用する

この記事では、5.6.5 未満の MySQL バージョンで CURRENT_TIMESTAMPDEFAULT として使用する方法について説明します。その結果、MySQL エラー1293 を防ぐことができます。

私たちの方法には、テーブルの列を並べ替えたり、DEFAULT 0 と時間値を使用したりすることが含まれます。

MySQL で CURRENT_TIMESTAMPDEFAULT として使用した場合のエラーを再現する

CURRENT_TIMESTAMPDEFAULT として使用する方法を示す前に、エラーを再現してみましょう。これは、CURRENT_TIMESTAMPDEFAULT として使用しようとしたときに発生するエラーです。

フォローするには、次の手順を実行します。

  • 5.6.5 未満の MySQL バージョンをダウンロードします。これは、XAMPP1.8.0またはその他の手段の一部として入手できます。
  • XAMPP で MySQL を開き、mysql -u root -p でログインします。MySQL のバージョンは 5.5.2a であるため、5.6.5 よりも小さくなっています。
  • just_a_test_db というデータベースを作成します。

次に、次の SQL を使用して、データベースに site_users テーブルを作成します。

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;

次の画像に示すように、エラーが発生します。

MySQL5.5.25a の MySQL エラー1293

MySQL で CURRENT_TIMESTAMPDEFAULT として使用するようにテーブル列を並べ替えます

SQL クエリでテーブルの列を並べ替える場合は、CURRENT_TIMESTAMPDEFAULT として使用できます。DEFAULT として CURRENT_TIMESTAMP が付いている列が最初に来る必要があります。TIMESTAMP 値を持つ他の列が続くはずです。

次の SQL では、SQL を並べ替えて、MySQL がテーブルを作成します。

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;

MySQL コンソールでの出力:

テーブル列を並べ替えた後、データベーステーブルが正常に作成されました

MySQL で DEFAULT 0 を使って CURRENT_TIMESTAMPDEFAULT として使用する

DEFAULT 0 の使用は、CURRENT_TIMESTAMPDEFAULT として使用できるようにするもう 1つのオプションです。デフォルト値のない TIMESTAMP 列に適用します。

SQL から、これは date_validated 列です。次の SQL は、これを行う方法を示しています。

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;

MySQL コンソールでの出力:

MySQL5.5.25a の TIMESTAMP 列で DEFAULT0 を使用する

MySQL で時間値を使用して CURRENT_TIMESTAMPDEFAULT として使用する

TIMESTAMP のデフォルトが時間の場合、他の列で DEFAULT として CURRENT_TIMESTAMP を使用できます。この時間の値は 0000-00-00 00:00:00 であり、date_validated 列で使用しました。

次の SQL は、これが実際に動作していることを示しています。

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;

MySQL コンソールでの出力:

MySQL 5.5.25a の TIMESTAMP 列の時間値の使用

著者: Habdul Hazeez
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

関連記事 - MySQL Timestamp