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