💣
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 となりました。
Discussion