プログラマ38の日記

主にプログラムメモです。

MySQL: lower_case_table_names の違いではまった

テーブルの大文字と小文字を区別するパラメータ「lower_case_table_names」の違いではまりました。

はまったのは次です。

 

lower_case_table_names=0 の場合(Linuxなどの場合)

  • テーブル名は、大文字小文字を区別するのでキャメルケースを利用している場合、正しくテーブル名を扱う必要がある。
  • SQLでテーブルに別名を付けた場合、その別名も大文字小文字を区別する必要がある。

 

WindowsMySQLから、LinuxMySQLへ移行する場合、とても注意が必要です。

WindowsMySQLで開発する際は、lower_case_table_names=1 となりテーブルは大文字小文字を区別せず、テーブルの別名も大文字小文字を区別しません。

テーブル名にキャメルケースを利用したとしても、テーブル作成時に小文字に変換されます。

 

そしてその定義をそのままLinuxMySQLへ持っていくと、大文字小文字を意識していないSQLはことごとくエラーとなります。(そして、テーブルがないというメッセージだけなので、エラーの理由に気づきずらいので注意です)