💣

MySQLのlower_case_tables_namesでハマった

2021/08/10に公開

まえがき

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