phpMyAdminでのインポートの際のエラーの解消方法
ローカル環境でサイトを構築したため、データベースをローカルから本番環境に移そうとしています。エクスポートは無事にできたのですが、インポートの際、いくつかエラーが出てしまいました。エラーメッセージは以下の通りです。
どなたか解消方法がおわかりの方はいらっしゃいますでしょうか。
よろしくお願いいたします。
SQL query:--
-- データベース: `concrete5`
-- テーブルの構造 `calendareventversions`
--
CREATE TABLE `calendareventversions` (
`eventVersionID` int(10) UNSIGNED NOT NULL,
`evDateAdded` datetime NOT NULL,
`evActivateDateTime` datetime DEFAULT NULL,
`evIsApproved` tinyint(1) NOT NULL,
`evDescription` longtext COLLATE utf8_unicode_ci,
`evName` longtext COLLATE utf8_unicode_ci,
`evRelatedPageRelationType` varchar(1) COLLATE utf8_unicode_ci DEFAULT NULL,
`cID` int(10) UNSIGNED NOT NULL DEFAULT '0',
`eventID` int(10) UNSIGNED DEFAULT NULL,
`uID` int(10) UNSIGNED DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
MySQL のメッセージ:
#1050 - Table 'calendareventversions' already exists
Yamachann11
Re: phpMyAdminでのインポートの際のエラーの解消方法
は、インポート側に既に存在するというエラーです。
テーブル'calendareventversionsはすでに存在する
インポート側のテーブルは、全て削除してからやり直してください。
しかし、ローカル側で開発したテーブル名が全て小文字になってしまっています。
これでは、インポートできたとしても、concrete5は動作しません。
ローカルの開発環境の環境設定に誤り(設定漏れが)あります。
問題になった、calendareventversionsテーブルだけでなく、
全てのテーブルが小文字で作成されてしまっています。
本来のテーブル名は、CalendarEventVersionsです。
テーブル名が、 calendareventversions となった背景は、
テーブル名の大文字小文字を区別するかどうかの設定漏れたためです。
例えば、
開発環境がWindowsで
本番環境がLinux
の場合、
Windows側で、データベースを作成する前に
my.iniの(lower_case_table_names)の値を変更しなければなりません。26Line辺りの[mysqld]の直下に値を追加
26 [mysqld]
27 lower_case_table_names = 2
※ Windowsでの大文字・小文字の扱いに注意
Linuxは標準で0、windowsは1、が設定されている。そのためOSの異なるMySQL間で移行する場合は注意が必要。
MySQLではlower_case_table_namesという設定パラメータがあります。
これはテーブル名の大文字小文字を区別するかどうかの設定を行うもの(Windowsはデフォルトが1)
この状態ではSQL文でテーブル名を大文字にしても、作られるテーブルは小文字に丸められる。
MySQL の lower_case_table_namesについて,テーブル名とデータベース名の中の大文字小文字について
Linux環境は設定値が1ではなく、SQL通りに大文字でテーブルが作られていたので、Linux環境にデプロイすると動かない。
単一プラットフォーム上での開発に統一すればよいのですが、Windowsでは、各々で気をつけるしかない。
OS XやWindowsではlower_case_table_names=2を使用する。
その他のシステムでは0(Linux)を使用する。
SHOW TABLESやSHOW DATABASEを叩いた時でも大文字と小文字が区別された名前を確認することが出来る。
一方でOS XやWindows上で,ユーザのステートメントがデータベース名やテーブル名をひくときに大文字と小文字が正確に区別されているかを確認する必要がある。
残念ですが、テーブルを作り直す必要があります。
今のままデータベースを残しておいて
作り直す方法は2つです。
1. lower_case_table_names = 2で新しくテーブルを作成し、
旧テーブルから新テーブルに全てのデータをINSERT INTOで移行し、
新しいデータベースを本番環境に移行する。
2. lower_case_table_names = 2で新しくテーブルを作成し、
旧環境のページを参照しながら、
新しい環境でページを作りなおしてから、本番環境に移行する