MySQL において、データベースとテーブルは、ディレクトリとそれらのディレクトリ内のファイルに対応しています。そのため、ベースとなっているオペレーティングシステムで大文字と小文字が区別される場合(ケース依存)、データベース名とテーブル名でも大文字と小文字が区別されます。つまり、Windows ではデータベース名とテーブル名で大文字と小文字は区別されず、ほとんどの種類の Unix では大文字と小文字が区別されることになります。ただし、重要な例外が 1 つあります。Mac OS X でデフォルトの HFS+ ファイルシステムを使用している場合です。 しかし、Mac OS X は UFS ボリュームもサポートしています。UFS ボリュームでは Unix の場合と同じように Mac OS X でも大文字と小文字が区別されます。 See 項1.8.3. 「SQL-92 標準に対する MySQL 拡張機能」。
注意: Windows
ではデータベース名とテーブル名で大文字と小文字は区別されませんが(ケース非依存)、同じクエリ内で異なるケースを使用して同じデータベースやテーブルを参照しないようにしてください。次のクエリでは、同じテーブルが
my_table
および
MY_TABLE
として参照されています。したがって、このクエリは機能しません。
mysql> SELECT * FROM my_table WHERE MY_TABLE.col=1;
カラム名とカラムのエイリアスは、あらゆる状況においてケース非依存です。
テーブルのエイリアスはケース依存です。次のクエリでは、同じエイリアスが
a
および A
として参照されています。したがって、このクエリは機能しません。
mysql>SELECT col_name FROM tbl_name AS a
->WHERE a.col_name = 1 OR A.col_name = 2;
データベース名やテーブル名に大文字と小文字のどちらを使用したか覚えにくい場合は、データベースとテーブルは必ず小文字の名前で作成するなどの一貫した規則を設けるようにします。
この問題に対処する 1
つの方法は、mysqld
の先頭に
-O lower_case_table_names=1
を付けることです。このオプションのデフォルトは
Windows では 1 で、Unix では 0 です。
lower_case_table_names
が 1
の場合、MySQL
では、保管およびルックアップ時にすべてのテーブル名が小文字に変換されます(バージョン
4.0.2
以降、このオプションはデータベース名にも適用されます。4.1.1
以降、このオプションはテーブルエイリアスにも適用されます)。
このオプションを変更する場合は、最初に元のテーブル名を小文字に変換してから
mysqld
を起動する必要があります。
MyISAM
ファイルを Windows から Unix
のディスクに移動した場合、mysql_fix_extensions
ツールを使用して、指定した各データベースディレクトリ内のファイル拡張子のケース(小文字の
.frm
、大文字の
.MYI
および
.MYD
)を修正する必要がある場合があります
mysql_fix_extensions
は
scripts
サブディレクトリにあります。
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.