MySQLのSELECT
クエリで、デフォルトで大文字と小文字が区別されるのか、大文字と小文字が区別されないのですか。そうでない場合は、次のようなことができるようにするためにどのようなクエリを送信する必要がありますか。
SELECT * FROM `table` WHERE `Value` = "iaresavage"
実際には、Value
の実際の値はIAreSavage
です。
バイナリ比較 をしない限り、大文字と小文字は区別されません。
値と渡されたパラメータを小文字にすることができます。
SELECT * FROM `table` WHERE LOWER(`Value`) = LOWER("IAreSavage")
別の(より良い)方法は、ドキュメントの中で で述べられているようにCOLLATE
演算子を使うことです
バイナリの使用
これは単純な選択です
SELECT * FROM myTable WHERE 'something' = 'Something'
= 1
これはバイナリ付きの選択です
SELECT * FROM myTable WHERE BINARY 'something' = 'Something'
または
SELECT * FROM myTable WHERE 'something' = BINARY 'Something'
= 0
列が_ci
で終わる照合順序(defaultlatin1_general_ci
照合順序など)を使用する場合、比較では大文字と小文字が区別されず、 )_cs
または_bin
で終わる照合順序を使用する場合は、大文字と小文字が区別されます(utf8_unicode_cs
およびutf8_bin
照合順序など)。
あなたはserver、databaseそしてconnectionの照合順序をチェックすることができます。
mysql> show variables like '%collation%';
+----------------------+-------------------+
| Variable_name | Value |
+----------------------+-------------------+
| collation_connection | utf8_general_ci |
| collation_database | latin1_swedish_ci |
| collation_server | latin1_swedish_ci |
+----------------------+-------------------+
そして、あなたはtable照合順序をチェックすることができます。
mysql> SELECT table_schema, table_name, table_collation
FROM information_schema.tables WHERE table_name = `mytable`;
+----------------------+------------+-------------------+
| table_schema | table_name | table_collation |
+----------------------+------------+-------------------+
| myschema | mytable | latin1_swedish_ci |
データベース、テーブル、または列の照合順序は、次のように大文字と小文字が区別されるように変更できます。
-- Change database collation
ALTER DATABASE `databasename` DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;
-- or change table collation
ALTER TABLE `table` CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
-- or change column collation
ALTER TABLE `table` CHANGE `Value`
`Value` VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_bin;
比較では大文字と小文字が区別されます。
WHERE句の文字列比較では大文字と小文字が区別されません。あなたが使用して比較することを試みることができます
WHERE `colname` = 'keyword'
または
WHERE `colname` = 'KeyWord'
あなたは同じ結果を得るでしょう。これはMySQLのデフォルトの動作です。
比較を大文字と小文字を区別にする場合は、次のようにCOLLATE
name__を追加します。
WHERE `colname` COLLATE latin1_general_cs = 'KeyWord'
そのSQLでは、これとは異なる結果になります。WHERE colname
COLLATE latin1_general_cs = 'keyword'
latin1_general_cs
は、ほとんどのデータベースで共通またはデフォルトの照合順序です。
選択した照合順序は、大文字と小文字が区別されるかどうかに関係なく設定されます。
デフォルトでは大文字と小文字が区別されませんが、次に検討する必要がある最も重要なことは、テーブルの作成時に大文字と小文字の区別を指定できるため、まずテーブルの作成方法です。
以下のスクリプトはテーブルを作成します。一番下の方に、「COLLATE latin1_general_cs」と表示されています。最後のcsは大文字と小文字を区別します。テーブルの大文字と小文字を区別しないようにするには、その部分を省略するか、 "COLLATE latin1_general_ci"を使用します。
CREATE Table PEOPLE (
USER_ID INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
FIRST_NAME VARCHAR(50) NOT NULL,
LAST_NAME VARCHAR(50) NOT NULL,
PRIMARY KEY (USER_ID)
)
ENGINE=MyISAM DEFAULT CHARACTER SET latin1
COLLATE latin1_general_cs AUTO_INCREMENT=0;
自分のテーブルを作成できるようなプロジェクトの場合は、テーブルを作成するときに大文字と小文字の区別を設定することをお勧めします。
SQL Selectでは大文字と小文字が区別されません。
このリンクをクリックすると、大文字と小文字が区別されます。 http://web.archive.org/web/20080811231016/http://sqlserver2000.databases.aspfaq.com:80/how-can-i- make-my-sql-query-case-sensitive.html
試してみてください。
order by lower(column_name) asc;
Linuxでは、lower_case_table_name
configディレクティブを1に設定しない限り、テーブル名の大文字と小文字が区別されます。これは、Linuxでは大文字と小文字が区別されるファイルによってテーブルが表されるためです。
特にWindowsでは大文字と小文字が区別されず、実際の運用環境に展開することに注意してください。例えば:
"SELECT * from mytable"
上記のディレクティブが設定されていない限り、テーブルmyTableに対してはWindowsでは成功しますが、Linuxでは失敗します。
ここでの参照: http://dev.mysql.com/doc/refman/5.0/en/identifier-case-sensitivity.html
バイナリフラグが設定された文字列フィールドでは、常に大文字と小文字が区別されます。非バイナリテキストフィールドの大文字と小文字を区別した検索が必要な場合は、これを使用します。SELECT 'test' REGEXP BINARY 'TEST' AS RESULT;
あなたはそれを試すことができます。それが役に立つことを願っています。
SELECT * FROM `table` WHERE `Value` COLLATE latin1_general_cs = "IAreSavage"