Linuxサーバは大文字小文字に厳格

Read More

ちょっとはまったのでメモ


基本的に開発はwindowsXP上で行うが、
本番サーバはLinuxであったりすることが多い


で、今回は、先人が作ったDBを使って、バッチプログラムを組んでいたときのこと


まずwindows上に仮のDBを用意し、データを流しこんで同じ環境を作成。
次に、バッチプログラムを作成し、ローカル上にて動作を確認。
次に、本番環境へプログラムをうpし、そこでバッチを実行した時、

ここでwarningが発生した。




WHAT?!

調べてみると、本番DBからエクスポートしたダンプデータをwindows環境にインポートする際に、何がどうなってるのか知らないが、
大文字であったテーブル名が小文字に変換されていたようだ。
(これは多分mysqlの設定によるものと推測。面倒なので調べない)

で、それを元に作った私のプログラムでは小文字のテーブル名にアクセスするように作っていた

だがLinuxは厳密に大文字小文字を区別するので、
バッチプログラムのテーブル名が小文字だったことにwarningを出したようだ

うーん、確認しなかった自分も悪いけど、




大文字でテーブル作んな先人!


windowsカーネルは大文字小文字を区別しない簡単な例をあげると
AAA.txt
というファイルと、
aaa.txt
というファイルを同一フォルダ内で作成してみて下さい。
できないでしょう
同じ名前として認識しているからですね

あと当然windows上で実行されたSQLも大文字小文字を区別しません

このため、AAAtableという名のテーブルがあったとして、
アクセスするのにAAAtableでもaaatableでも許可してしまいます


Linuxが大文字小文字に厳格なんじゃなくてwindowsがルーズなんだなー

まー小文字で統一しましょう




--追記--
昔、カラム名に"200user"とか"住民"とかって名前を付けてるテーブルを見たことがある。
あほかと