LoginSignup
2
3

More than 5 years have passed since last update.

Windows上でMySQLのlower_case_table_namesにハマる

Last updated at Posted at 2018-10-16

先に結論書きますと、開発と本番の環境は極力合わせた方が良い事に尽きます。

Windows上で単体検証まで完了し、Linux(AWS)にソースをデプロイするも特定機能が動作せず。

調べてみるとDB処理に不具合があり、ログ上にはテーブルが存在しない旨が出力されていました。

RDS上で確かにテーブル作られてるし、向き先やポート番号等なども間違いない。

色々試行錯誤してMySQL周りの設定にハマっていたことに気付きました。

lower_case_table_names

MySQLではlower_case_table_namesという設定パラメータがあります。

これはテーブル名の大文字小文字を区別するかどうかの設定を行うものです。

以下ブログが詳細を書いてくれてますが、どうやらWindowsはデフォルト1が設定。

この状態ではSQL文でテーブル名を大文字にしても、作られるテーブルは小文字に丸められます。

MySQL の lower_case_table_namesについて,テーブル名とデータベース名の中の大文字小文字について

ちなみに現場のLinux環境は設定値が1ではなく、SQL通りに大文字でテーブルが作られていたので、Linux環境にデプロイすると急に動かなくなっていたようです。

マニアックな設定周りで変な時間を取られない為に、単一プラットフォーム上での開発に統一すればよいのですが、まだまだ現場によってはWindows派が多かったりします。

各々で気をつけるしかないですね。

あれ!? MySQLの設定値が反映されない

原因がMySQLであることが分かったので、試しにローカル環境で設定を変更して、本当に大文字でテーブルが作られるか確認しようとするも、MySQL再起動しても何故か設定反映されず(涙)

結果から言いますと、Windows Vista以降に導入されたVirtualStoreの仕組みに今更躓いてました。

ファイルに対して書き込み権限が無いと、エラーを出す代わりに以下にファイルを書き出す仕様らしい。

C:\Users\ユーザ名\AppData\Local\VirtualStore

今回慣れないwindows10での作業(管理者権限でない)でしたが、Windows7(管理者権限での作業)は使い慣れていたので、まさかこんな問題に直面するなんて思いもせず、完全にスルーしてましたね(反省)

C:\Users\ユーザ名\AppData\Local\VirtualStore配下に作られたファイルを正規の場所に置こうとすると、アラートが出ますがOKボタン押して再起動すると無事に反映されました。

lower_case_table_namesを2にするとSQL通りに大文字で作られ無事解決。

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3