【MySQL】timestamp型のカラムを見つける

  • 2025年4月30日
  • SQL

 2038年問題という問題があります。これはUNIX系システムで使われている32ビットの時刻表現(1970年1月1日からの秒数)が2038年1月19日3時14分7秒に限界を超えることで誤った結果になる問題です。これにより一部のシステムやアプリケーションで異常動作やクラッシュが発生する可能性があります。n年後のデータを扱うするシステムなどで既に問題が起きている場合もあります。MySQLのtimestamp型は日時を扱う型で、これも2038年問題の対象です。この記事ではあるデータベース内にあるtimestamp型のカラムを見つける方法を紹介します。

MySQLではinformation_schemaに各テーブルの情報が入っています。information_schema内のデータを適切に引き出すことでtimestamp型のカラムを探せます。実際のSQLが次です。

# どのスキーマのどのテーブルのどのカラムが timestamp 型なのかわかるようにカラムを選択
SELECT TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME, DATA_TYPE
# カラムについての情報が入っている COLUMNS テーブルを参照する
FROM INFORMATION_SCHEMA.COLUMNS
# timestamp 型のカラムを抽出する
WHERE DATA_TYPE = 'timestamp'
  # MySQL組み込みのテーブルは無視する(その内MySQLのバージョンも更新しないとMySQL本体が2038年問題に引っ掛かりそうです)
  AND TABLE_SCHEMA NOT IN ('mysql', 'performance_schema', 'information_schema', 'sys');

# 結果例
TABLE_SCHEMA,TABLE_NAME,COLUMN_NAME,DATA_TYPE
test_db,personal_access_tokens,created_at,timestamp
test_db,personal_access_tokens,expires_at,timestamp
test_db,personal_access_tokens,last_used_at,timestamp
test_db,personal_access_tokens,updated_at,timestamp
tmp,personal_access_tokens,created_at,timestamp
tmp,personal_access_tokens,expires_at,timestamp
tmp,personal_access_tokens,last_used_at,timestamp
tmp,personal_access_tokens,updated_at,timestamp
tmp,queue_monitor,finished_at,timestamp
tmp,queue_monitor,started_at,timestamp

 これで見つけたtimestamp型をdatetime型に変えるなどして対処すれば、それで2038年問題を解決できます。

>株式会社シーポイントラボ

株式会社シーポイントラボ

TEL:053-543-9889
営業時間:9:00~18:00(月〜金)
住所:〒432-8003
   静岡県浜松市中央区和地山3-1-7
   浜松イノベーションキューブ 315
※ご来社の際はインターホンで「316」をお呼びください

CTR IMG