Mysql大文字と小文字の問題

1877 ワード

MYSQLでは、デフォルトではクエリは大文字と小文字を区別しません.たとえば、次のようになります.
CREATE TABLE T1(
    NAME VARCHAR(10)
);

このテーブルでは、デフォルトでは、次の2つのクエリの結果は同じです.
SELECT * FROM T1 WHERE NAME='ABC';
SELECT * FROM T1 WHERE NAME='Abc';

つまり、大文字と小文字を区別せず、データベース設計の際に大文字と小文字を敏感にする必要がある可能性があります.解決策は、テーブルを作成する際にBINARY表示を使用することです.
CREATE TABLE T1(
    NAME VARCHAR(10) BINARY
);

またはBINARYキーを使用します.
SELECT * FROM T1 WHERE NAME = BINARY 'ABC';
SELECT * FROM T1 WHERE NAME LIKE BINARY '%Abc%';

また、MySQLでは、データベースとテーブルがそれらのディレクトリの下のディレクトリとファイルに対応しています.したがって、オペレーティングシステムの機密性は、データベースとテーブルの名前の大文字と小文字の機密性を決定します.これは、データベースとテーブル名がWindowsでは大文字と小文字が敏感ではなく、ほとんどのタイプのUnixシステムでは大文字と小文字が敏感であることを意味します.
Windowsでは、データベースとテーブル名は大文字と小文字を無視していますが、同じクエリで異なる大文字と小文字を使用して、特定のデータベースとテーブルを参照するべきではありません.次のクエリはmy_で動作しません.tableとMY_TABLEはテーブルを参照します.
SELECT * FROM my_table WHERE MY_TABLE.col=1;

カラム名とカラムの別名は、すべての場合、大文字と小文字は無視されます.
テーブルの別名は大文字と小文字を区別します.次のクエリは、別名をaとAで参照するため動作しません.
SELECT col_name FROM tbl_name AS a WHERE a.col_name = 1 OR A.col_name = 2;

データベースとテーブル名のアルファベットの大文字と小文字を記憶するのが難しい場合は、データベースとテーブルを常に小文字で作成するなど、一貫した規則を使用することをお勧めします.
この問題を回避するもう一つの方法は-O lower_case_table_names=1パラメータはmysqldを起動します.デフォルトではWindowsでこのオプションは1、Unixでは0です.もしlower_case_table_namesは1で、MySQLは保存と検索時にすべてのテーブル名を小文字線に変換します.(MySQL 4.0.2から、このオプションはデータベース名にも適用されます.)このオプションを変更する場合は、mysqldを起動する前に、古いテーブル名を小文字に変換する必要があります.
MySQLのプロファイルmyを使用することもできます.iniに1行追加:
lower_case_table_names = 0
そのうち0:大文字と小文字を区別し、1:大文字と小文字を区別しない
MySQLのLinuxでのデータベース名、テーブル名、カラム名、別名の大文字と小文字のルールは次のとおりです.
1、データベース名とテーブル名は大文字と小文字を厳格に区別する.
2、表の別名は大文字と小文字を厳格に区別する.
3、列名と列の別名はすべての場合、大文字と小文字を無視する.
4、変数名も大文字と小文字を厳格に区別する.
MySQLはWindowsでも大文字と小文字を区別しません.