phpMyAdminの「テーブルを(データベース).(テーブル)にコピーする」でエラーが出る理由と対処方法

この記事は約3分で読めます。
スポンサーリンク

当サイトには広告が含まれています。

(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]

タイトルとURLをコピーしました