MySQLのlower_case_tables_namesでハマった
まえがき
Windowsで開発していたJava + MySQLのプロジェクトの開発をLinuxデスクトップで
引き継いでみようと思ってやってみた。
本文
大枠としては普通に動いた。 IntelliJ IDEA は普通にLinux版がある。
MySQLももちろんLinux版がある。
Javaもバッチリ。
ではOKと思ってシステムを起動してみると、MySQLのテーブルがないといって落ちる。
データはWindows上で動いてたときのをそのままdump/restoreしたのに。
原因
- MySQLがテーブル名大文字小文字を区別するか否かは lower_case_tables_names という設定で変わる
- 公式 https://dev.mysql.com/doc/refman/8.0/en/identifier-case-sensitivity.html
- この設定はOSによって初期値が異なり、簡単に言えば Windows / macOS は大文字小文字を区別しない。Linuxではテーブル名の大文字小文字を区別する。
- で、システム内のSQLを見ると…大文字小文字がDB上のと全然違うので「なるほどね。。」と
蛇足
- lower_case_tables_names は、dumpを取り込む前にセットした方がいいです。(ファイル名の取扱が変わるため)
- 当方の環境ではとりあえず、 lower_case_tables_names = 1 をセットしてOKとなりました。