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


173

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

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

私たちが使用するサーバーはすべてUbuntuにあります。


回答:


203

一般に:

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

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

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

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


40
私のコードがローカルのWindows環境でうまく機能していたので、これは完全に私を焼きましたが、Linuxの本番環境に移動すると例外がスローされました!! ありがとう!
portforwardpodcast 2013

6
この回答には注意点が1つありますが、ドキュメントには記載されていません。InnoDBはデータベースやテーブルにファイル名やディレクトリ名を使用しないため、大文字と小文字を区別するシステムで実行された場合でも、そのオブジェクトは常に大文字と小文字を区別しません。このために間違って行くことができるものの例については、この質問を参照してください:stackoverflow.com/questions/23182969/...
ジュール・

これだけではありません。構成可能であるため、StephenLembertの回答をご覧ください
Chris Wood

1
デフォルトでは、ほとんどのMacコンピュータは大文字と小文字を区別しないファイルシステムを使用します。ただし、ファイルシステムで大文字と小文字を区別するようにオプトインすることもできます。
チャド

これとファイル名の大文字と小文字の区別が、私がWeb開発者としてUbuntuに移行した理由の1つです。
ムハンマドビンユスラット2017

99

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

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

lower_case_table_names = 1

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


1
基礎となるUnixが大文字である場合でも、MacOS Xでは大文字と小文字は区別されません。これが、クエリではなくても、MacのMySQL内のオートコンプリートでテーブル名またはフィールド名の大文字と小文字が区別される理由です。
David

はい、しかしこの声明を置くためにそこにありますか?[mysql]グループの下の/etc/mysql/my.cnfにあると思います。しかし、これは十分ではなく、まだ何か他のことを行う必要があります(もちろんmysqlを再起動する以外に
Alg_D

1
これは新しいテーブルにのみ影響します。この設定を変更する前に、既存のテーブルの名前を小文字に変更する必要があります。
マーティン

19

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


3
それがInnoDBテーブルに常に当てはまるとは思いません。
Simon East

@SimonEastと思う理由を教えてください。
アーヤ

16

それはlower_case_table_namesシステム変数に依存します:

show variables where Variable_name='lower_case_table_names'

これには次の3つの値が考えられます。

  • 0-レターケースがで指定されたCREATE TABLECREATE DATABASEのステートメント。名前の比較では、大文字と小文字が区別されます。
  • 1 -テーブル名はディスクに小文字で保存され、名前の比較では大文字と小文字が区別されません。
  • 2-レターケースがで指定されたCREATE TABLECREATE DATABASEのステートメントが、MySQLは、ルックアップに小文字に変換します。名前の比較では、大文字と小文字は区別されません。

ドキュメンテーション


11
  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_namesある1今、

機能させるには、これらのテーブルを再作成する必要がある場合があります

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.