web-dev-qa-db-ja.com

MySQLのテーブル名では大文字と小文字が区別されますか?

MySQLのテーブル名では大文字と小文字が区別されますか?

私のWindows開発マシンでは、私が持っているコードは、すべて小文字のように見えるテーブルを照会できます。データセンターのテストサーバーに展開すると、テーブル名が大文字で始まるように見えます。

使用するサーバーはすべてUbuntu上にあります。

149
benstpierre

一般に:

Windowsではデータベース名とテーブル名は大文字と小文字を区別しません。ほとんどの種類のUnixでは大文字と小文字を区別します。

MySQLでは、データベースはデータディレクトリ内のディレクトリに対応します。データベース内の各テーブルは、データベースディレクトリ内の少なくとも1つのファイルに対応しています。その結果、基盤となるオペレーティングシステムの大文字と小文字の区別は、データベース名とテーブル名の大文字と小文字の区別に影響します。

システム変数lower_case_table_namesを使用して、テーブル名をディスクに保存する方法を構成できます。 (my.cnf [mysqld]の下の設定)

詳細については、セクション 10.2.2識別子の大文字と小文字の区別 を参照してください。

168
CloudyMarble

データベース名とテーブル名は、Windowsでは大文字と小文字が区別されず、ほとんどの種類のUnixまたはLinuxでは大文字と小文字が区別されます。

この問題を解決するには、lower_case_table_namesを1に設定します

lower_case_table_names = 1

これにより、どのように記述しても、すべてのテーブルが小文字になります

91
StephenLembert

MySQLのテーブル名はファイルシステムエントリであるため、基になるファイルシステムが大文字と小文字を区別しない場合、大文字と小文字は区別されません。

19
Oswald

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はルックアップ時に小文字に変換します。名前の比較では、大文字と小文字は区別されません。

ドキュメント

12
Raman Sahasi
  1. /etc/mysql/my.cnfでファイルを見つけます

  2. 次の行を追加して、ファイルを編集します。

    [mysqld]

    lower_case_table_names=1

  3. Sudo /etc/init.d/mysql restart

  4. mysqladmin -u root -p variables | grep tableを実行して、lower_case_table_names1であることを確認します

動作させるにはこれらのテーブルを再作成する必要があるかもしれません

4
sendon1982