在 MySQL 中使用 CURRENT_TIMESTAMP 作為預設值
-
在 MySQL 中使用
CURRENT_TIMESTAMP
作為DEFAULT
時重現錯誤 -
重新排序表列以在 MySQL 中使用
CURRENT_TIMESTAMP
作為DEFAULT
-
使用
DEFAULT 0
在 MySQL 中使用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 版本。你將獲得它作為 XAMPP 1.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
。以 CURRENT_TIMESTAMP
為 DEFAULT
的列應該放在第一位;應遵循具有 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 控制檯中的輸出:
使用 DEFAULT 0
在 MySQL 中使用 CURRENT_TIMESTAMP
作為 DEFAULT
使用 DEFAULT 0
是另一個選項,它允許你使用 CURRENT_TIMESTAMP
作為 DEFAULT
。你將其應用於沒有預設值的 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
的預設值是時間,你可以在其他列上使用 CURRENT_TIMESTAMP
作為 DEFAULT
。這個時間值是 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