(2023年5月)

データベースにテーブルを作成し、それを別名でコピーしたいことがある。

phpMyAdminにはその機能があり、テーブルを表示した状態で、「操作」>「テーブルを(データベース).(テーブル)にコピーする」に進み、コピー先のデータベースを選択し、テーブル名を付けて「実行」すればよい。

テーブルを(データベース).(テーブル)にコピーする


この時、「構造のみ」と「構造とデータ」が選べるので、構造(器)だけ、他にコピーすることも可能だ。

テーブルをデータベース内に残したまま、別名として保存することで、バックアップ用途として使う場合も多いだろう。

エラー(#1064)発生



だが、このコピーでエラーとなり、コピーできない事案がある。

黄色いエラー画面


黄色いエラー画面が出現し、エラーコード「#1064」を吐いている。

黄色い画面の「編集」をクリックし、SQL文を見ると、「CREATE TABLE」が記されているが、その中に、以下のような箇所があった。

`(カラム名)` datetime NOT NULL DEFAULTcurrent_timestamp()

このカラムは、INSERTされた日時(datetime)を格納するもので、デフォルト値に「current_timestamp」を指定してあるのだが、

Run SQL Query


よく見ると、「DEFAULTcurrent_timestamp()」と、「DEFAULT」と「current」の間にスペースがない。

間に半角スペースを入れて実行すると、コピーは成功した。

これ、phpMyAdminのヴァグだよね?

ネットで調べると、同様の事案で難儀(ナウなヤング語)してる人がいた。

関連:テーブルを (データベース).(テーブル)にコピーする で失敗する

phpMyAdminのバージョン



このヴァグが発生するかどうか、周辺にあるphpMyAdminのバージョンを調べてみた。

・v4.9.5:発生しない
・v4.4.15.10:発生する
・v4.0.10.18:発生しない

てコトで、途中で発生したバグなんだろう。

# 最新のphpMyAdminは v4.9.11 と v5.2.1 である。

なお、上記バグのあるv4.4.15.10に於いて、デフォルト値にcurrent_timestampが設定されたカラムを含むテーブルに対し、phpMyAdminの「挿入」からデータを追加すると、current_timestampが発動せず、「0000-00-00 00:00:00」が格納されてしまうというバグもある。

0000-00-00


プログラムからINSERTする場合は問題ないが、phpMyAdminで挿入する際に問題となる。

この場合、日時(Y-m-d H:i:s等)を手入力するか、出現するカレンダーで選択しなければならない。

日時の入力


数件ならアレやけど、多数なら悲惨ヤデ、コルェは...

関連:phpMyAdminでレコード数(行数)が一致しない謎

関連:[MySQL] テーブルのエクスポートで、レコード数の不一致が生じる問題 [phpMyAdmin,Dump all rows]

関連:[phpMyAdmin] テーマ(スタイル/デザイン)の変更 [Debian]

関連:[2048KiB] phpMyAdminでのインポートファイルの上限を変更 [Debian,Ubuntu]
プレイステーション クラシック
ソニー・インタラクティブエンタテインメント
2018年12月発売 20タイトル収録
メガドライブミニ
セガゲームス
2019年9月発売 42タイトル収録
メガドライブミニW
セガゲームス
2019年9月発売 42タイトル収録
PCエンジン mini
コナミデジタルエンタテインメント
2020年3月発売 58タイトル収録
[PR] au PAY / au WALLET カード 情報