MySQLのテーブル名は大文字と小文字が区別されますか?
私のWindows開発マシンでは、コードがすべて小文字のように見えるテーブルにクエリを実行できます。データセンターのテストサーバーに展開すると、テーブル名が大文字で始まるように見えます。
私たちが使用するサーバーはすべてUbuntuにあります。
MySQLのテーブル名は大文字と小文字が区別されますか?
私のWindows開発マシンでは、コードがすべて小文字のように見えるテーブルにクエリを実行できます。データセンターのテストサーバーに展開すると、テーブル名が大文字で始まるように見えます。
私たちが使用するサーバーはすべてUbuntuにあります。
回答:
一般に:
Windowsではデータベース名とテーブル名の大文字と小文字は区別されず、ほとんどの種類のUnixでは大文字と小文字が区別されます。
MySQLでは、データベースはデータディレクトリ内のディレクトリに対応します。データベース内の各テーブルは、データベースディレクトリ内の少なくとも1つのファイルに対応しています。したがって、基になるオペレーティングシステムの大文字と小文字の区別は、データベース名とテーブル名の大文字と小文字の区別に影響します。
システム変数lower_case_table_names
([mysqld]の下のmy.cnf設定ファイル内)を使用して、テーブル名をディスクに保存する方法を設定できます。
詳細については、「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
今、
機能させるには、これらのテーブルを再作成する必要がある場合があります