MySQL のデフォルトとして CURRENT_TIMESTAMP を使用する
-
MySQL で
CURRENT_TIMESTAMP
をDEFAULT
として使用した場合のエラーを再現する -
MySQL で
CURRENT_TIMESTAMP
をDEFAULT
として使用するようにテーブル列を並べ替えます -
MySQL で
DEFAULT 0
を使ってCURRENT_TIMESTAMP
をDEFAULT
として使用する -
MySQL で時間値を使用して
CURRENT_TIMESTAMP
をDEFAULT
として使用する
この記事では、5.6.5
未満の MySQL バージョンで CURRENT_TIMESTAMP
を DEFAULT
として使用する方法について説明します。その結果、MySQL エラー1293 を防ぐことができます。
私たちの方法には、テーブルの列を並べ替えたり、DEFAULT 0
と時間値を使用したりすることが含まれます。
MySQL で CURRENT_TIMESTAMP
を DEFAULT
として使用した場合のエラーを再現する
CURRENT_TIMESTAMP
を DEFAULT
として使用する方法を示す前に、エラーを再現してみましょう。これは、CURRENT_TIMESTAMP
を DEFAULT
として使用しようとしたときに発生するエラーです。
フォローするには、次の手順を実行します。
-
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;
次の画像に示すように、エラーが発生します。
MySQL で CURRENT_TIMESTAMP
を DEFAULT
として使用するようにテーブル列を並べ替えます
SQL クエリでテーブルの列を並べ替える場合は、CURRENT_TIMESTAMP
を DEFAULT
として使用できます。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_TIMESTAMP
を DEFAULT
として使用する
DEFAULT 0
の使用は、CURRENT_TIMESTAMP
を DEFAULT
として使用できるようにするもう 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 コンソールでの出力:
MySQL で時間値を使用して CURRENT_TIMESTAMP
を DEFAULT
として使用する
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 コンソールでの出力:
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