MySQLのテーブル名では大文字と小文字が区別されますか?
私のWindows開発マシンでは、私が持っているコードは、すべて小文字のように見えるテーブルを照会できます。データセンターのテストサーバーに展開すると、テーブル名が大文字で始まるように見えます。
使用するサーバーはすべてUbuntu上にあります。
一般に:
Windowsではデータベース名とテーブル名は大文字と小文字を区別しません。ほとんどの種類のUnixでは大文字と小文字を区別します。
MySQLでは、データベースはデータディレクトリ内のディレクトリに対応します。データベース内の各テーブルは、データベースディレクトリ内の少なくとも1つのファイルに対応しています。その結果、基盤となるオペレーティングシステムの大文字と小文字の区別は、データベース名とテーブル名の大文字と小文字の区別に影響します。
システム変数lower_case_table_names
を使用して、テーブル名をディスクに保存する方法を構成できます。 (my.cnf [mysqld]の下の設定)
詳細については、セクション 10.2.2識別子の大文字と小文字の区別 を参照してください。
データベース名とテーブル名は、Windowsでは大文字と小文字が区別されず、ほとんどの種類のUnixまたはLinuxでは大文字と小文字が区別されます。
この問題を解決するには、lower_case_table_namesを1に設定します
lower_case_table_names = 1
これにより、どのように記述しても、すべてのテーブルが小文字になります
MySQLのテーブル名はファイルシステムエントリであるため、基になるファイルシステムが大文字と小文字を区別しない場合、大文字と小文字は区別されません。
lower_case_table_names
システム変数に依存します。
show variables where Variable_name='lower_case_table_names'
これには3つの可能な値があります。
0
-CREATE TABLE
またはCREATE DATABASE
ステートメントで指定されたレターケース。名前の比較では大文字と小文字が区別されます。1
-テーブル名はディスクに小文字で保存され、名前の比較では大文字と小文字が区別されません。2
-CREATE TABLE
またはCREATE DATABASE
ステートメントで指定された大文字小文字ですが、MySQLはルックアップ時に小文字に変換します。名前の比較では、大文字と小文字は区別されません。/etc/mysql/my.cnf
でファイルを見つけます
次の行を追加して、ファイルを編集します。
[mysqld]
lower_case_table_names=1
Sudo /etc/init.d/mysql restart
mysqladmin -u root -p variables | grep table
を実行して、lower_case_table_names
が1
であることを確認します
動作させるにはこれらのテーブルを再作成する必要があるかもしれません