Windows版のMySQLで大文字、小文字を区別する lower_case_table_names

データベース
スポンサーリンク

Windows版のMySQLをXAMPPでインストールしたら、大文字と小文字を区別してくれませんでした。

これは不便です。

どうしたらよいのでしょうか?

スポンサーリンク

MySQLのlower_case_table_names

結論として

Linuxでは、lower_case_table_names=0

Windowsでは、lower_case_table_names=2

を使うとよいようです。

 

以下に説明がありますが、結構長くて難しい。

https://dev.mysql.com/doc/refman/5.6/ja/identifier-case-sensitivity.html

 

説明
0 テーブル名とデータベース名は、CREATE TABLE または CREATE DATABASE ステートメントで
指定された大文字または小文字を使用してディスク上に格納されます。
名前比較では大文字と小文字が区別されます。
大文字小文字を区別しないファイル名を持つシステム (Windows や OS X など) で MySQL を実行する場合、この変数を 0 に設定しないでください。
大文字と小文字を区別しないファイルシステムで --lower-case-table-names=0 を使用して強制的にこの変数を 0 に設定し、
大文字と小文字を変えて MyISAM テーブル名にアクセスした場合、インデックスが破損することがあります。
1 テーブル名はディスク上に小文字で格納され、名前比較では大文字と小文字は区別されません。
MySQL では、保存およびルックアップ時にすべてのテーブル名が小文字に変換されます。
この動作はデータベース名やテーブルエイリアスにも適用されます。
2 テーブル名とデータベース名は、CREATE TABLE または CREATE DATABASE ステートメントで指定された大文字または小文字を使用して
ディスク上に格納されますが、MySQL ではルックアップ時に小文字に変換されます。
名前比較では大文字と小文字が区別されません。これは大文字と小文字が区別されないファイルシステムでのみ機能します。
InnoDB テーブル名は lower_case_table_names=1 のように、小文字で格納されます。

 

 

あれれ?

大文字小文字を区別しないファイル名を持つシステム (Windows や OS X など) で MySQL を実行する場合、この変数を 0 に設定しないでください。

と書いてある???

 

と思いきや、以下のように補足されていました。

Unix 上では lower_case_table_names=0 を、Windows 上では lower_case_table_names=2 を使用してください。これでデータベース名とテーブル名の大文字と小文字の区別が保持されます。この欠点は、ユーザーのステートメントが、Windows 上で正しい大文字または小文字でデータベース名およびテーブル名を常に参照していることを確認する必要があることです。大文字と小文字が区別される Unix にステートメントを転送する場合、大文字と小文字が正しくなければこのステートメントは機能しません。

 

XAMPPのMySQLでmy.ini に設定する

XAMPPのMySQLでlower_case_table_namesを設定する方法は次の通りです。

 

XAMPPのコントロールパネルを開きます。

 

Configを押して、my.ini を開きます。

以下のように、[mysqld] に lower_case_table_names=2 を追加します。

 

 

コメント