在 MySQL 中使用 CURRENT_TIMESTAMP 作為預設值

Habdul Hazeez 2023年1月30日 2022年7月12日
  1. 在 MySQL 中使用 CURRENT_TIMESTAMP 作為 DEFAULT 時重現錯誤
  2. 重新排序表列以在 MySQL 中使用 CURRENT_TIMESTAMP 作為 DEFAULT
  3. 使用 DEFAULT 0 在 MySQL 中使用 CURRENT_TIMESTAMP 作為 DEFAULT
  4. 使用時間值在 MySQL 中使用 CURRENT_TIMESTAMP 作為 DEFAULT
在 MySQL 中使用 CURRENT_TIMESTAMP 作為預設值

本文教你如何在低於 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 5.5.25a 中的 MySQL 錯誤 1293

重新排序表列以在 MySQL 中使用 CURRENT_TIMESTAMP 作為 DEFAULT

如果你對 SQL 查詢中的表列重新排序,則可以使用 CURRENT_TIMESTAMP 作為 DEFAULT。以 CURRENT_TIMESTAMPDEFAULT 的列應該放在第一位;應遵循具有 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 5.5.25a 中的 TIMESTAMP 列上使用 DEFAULT 0

使用時間值在 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 控制檯中的輸出:

在 MySQL 5.5.25a 中為 TIMESTAMP 列使用時間值

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