MariaDB 10.6 と 10.10 で TIMESTAMP カラムの暗黙付与を検証する

MariaDB では explicit_defaults_for_timestamp が未設定の場合、テーブル内で最初のTIMESTAMP 型カラムに NULL 属性・DEFAULT 句・ON UPDATE 句のいずれも指定していないと、DEFAULT current_timestamp()ON UPDATE current_timestamp() が暗黙に付与されます。

検証環境 mariadb10.6とmariadb10.10

Docker で MariaDB 10.6 と 10.10 のコンテナを構築しました。

services:
  mariadb-10.6:
    image: mariadb:10.6
    ports:
      - "3306:3306"
  mariadb-10.10:
    image: mariadb:10.10
    ports:
      - "3307:3306"

実行したSQL

両バージョンで同じテーブルを作成しました。token_expires カラムには NULL 属性・DEFAULT 句・ON UPDATE 句のいずれも指定していません。

CREATE TABLE timestamp_auto_default_test (
  id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
  token_expires TIMESTAMP NOT NULL
);

SHOW CREATE TABLE timestamp_auto_default_test;

検証結果

MariaDB 10.6 では、token_expires カラムに DEFAULT current_timestamp()ON UPDATE current_timestamp() が付与されました。

`token_expires` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()

MariaDB 10.10 では、同じ DDL でも付与されませんでした。

`token_expires` timestamp NOT NULL

まとめ

暗黙付与の挙動差を確認できました。

原因は、10.10 でこの機能自体が撤廃されたことではありません。explicit_defaults_for_timestampの値を確認したところ、明示的に設定していないにもかかわらず 10.6 では 0、10.10 では 1 でした。
このシステム変数のデフォルト値が 10.10 で変更されたことが、暗黙付与の有無を分けています。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください