![]() |
SitePoint: New Articles, Fresh Thinking for Web Developers and Designers |
Craig Buckler氏がSitePointにMySQL Cross-Platform Table Namingという興味深い記事を掲載している。MySQLでテーブル名をつける場合に気をつけるべき内容が簡潔にまとめられている。WindowsやMac OS Xで開発をおこない、LinuxやFreeBSDにデプロイして運用するといったスタイルを採用している場合には一読しておきたい内容だ。
MySQLではテーブルがファイルに対応することになる。Craig Buckler氏はMySQL Cross-Platform Table NamingのなかでMyTableという名前のテーブルを作成したものとして「SELECT id, name FROM mytable WHERE id = 1; 」というクエリを発行した場合にどうなるかで状況を説明している。この場合、WindowsやMac OS Xではクエリは動作するものの、Linuxではデフォルト設定のままでは動作しない。
これはOSのファイルシステムが名前に関して大文字小文字を区別するかしないかといったところに違いがある。LinuxなどのUNIX系OSは大文字小文字を明確に区別するため、前述したクエリは動作しない。ただし、MySQLの設定(lower_case_table_names)でこの動作を変えることもできるという。Linuxではlower_case_table_namesには0が設定されており、Windowsでは1が、Mac OS Xでは2がデフォルトで設定されているという。0は大文字と小文字の違いをチェックし、ファイル名もそのまま指定されたものが使われる。1では大文字小文字は区別せず、名前や検索も小文字でおこなわれる。2は1に似ているが、MyISAMのテーブルだけはそのまま指定された文字が使われ検索では小文字が使わるという動きになるようだ。
lower_case_table_namesを0に設定して問題が発生しないようにするというのは開発段階でポータビリティを確保できる無難な設定のように思えるが、Windowsのように大文字小文字を明確にしないファイルシステムを採用しているケースではMyISAMテーブルで問題が発生するケースがあるため設定しない方がいいようだ。Craig Buckler氏は記事の最後で個人的なことだが、データベース名、テーブル名、インデックス名、キー名などMySQLで利用する名前には小文字を使うようにしているという説明がある。使う名前を小文字で統一するのが簡単で効果的な方法というわけだ。