MySQL: lower_case_table_names の違いではまった
テーブルの大文字と小文字を区別するパラメータ「lower_case_table_names」の違いではまりました。
はまったのは次です。
lower_case_table_names=0 の場合(Linuxなどの場合)
- テーブル名は、大文字小文字を区別するのでキャメルケースを利用している場合、正しくテーブル名を扱う必要がある。
- SQLでテーブルに別名を付けた場合、その別名も大文字小文字を区別する必要がある。
WindowsのMySQLから、LinuxのMySQLへ移行する場合、とても注意が必要です。
WindowsのMySQLで開発する際は、lower_case_table_names=1 となりテーブルは大文字小文字を区別せず、テーブルの別名も大文字小文字を区別しません。
テーブル名にキャメルケースを利用したとしても、テーブル作成時に小文字に変換されます。
そしてその定義をそのままLinuxのMySQLへ持っていくと、大文字小文字を意識していないSQLはことごとくエラーとなります。(そして、テーブルがないというメッセージだけなので、エラーの理由に気づきずらいので注意です)