【MySQL】テーブル名(識別名)の大小区別

MySQLを使ったアプリ改修を行っていた所、テーブル名の大小区別が開発機(Windows)と本番機(Linux)では異なっていたので、調べてみた。

まずMySQLをデフォルトでインストールすると、OSによってテーブル名の大文字・小文字の区別の扱いが異なる。

そこで、大文字・小文字の区別をさせるための設定として、「lower_case_table_names」という項目の設定を「0」にすると大文字・小文字が区別されるようになる。

現在の設定確認をするには、以下SQLを実行して確認をしてほしい。

show variables where variable_name='lower_case_table_names';

設定値は1~3まであるようで、詳細はMySQLのリファレンスマニュアルを参照してほしい。
https://dev.mysql.com/doc/refman/8.0/ja/identifier-case-sensitivity.html

  • 0:大文字・小文字区別する
  • 1:大文字・小文字区別しない(テーブル名を全て小文字にして格納)
  • 2:大文字・小文字区別しない(テーブル名をそのまま格納)

Linuxは標準で0、Windowsは標準で1が設定されているので、
Linuxの場合は「my.conf」、Windowsの場合は「my.ini」に下記のように記載する。

今回はLinuxの設定に合わせたいので、「0」とする。

[mysqld]
lower_case_table_names = 0

設定変更後はサービスの再起動を行い、再度以下SQLを実行し反映されているか確認を行う。

show variables where variable_name='lower_case_table_names';