web-dev-qa-db-ja.com

MySQLの大文字と小文字を区別しない選択

MySQLのSELECTクエリで、デフォルトで大文字と小文字が区別されるのか、大文字と小文字が区別されないのですか。そうでない場合は、次のようなことができるようにするためにどのようなクエリを送信する必要がありますか。

SELECT * FROM `table` WHERE `Value` = "iaresavage"

実際には、Valueの実際の値はIAreSavageです。

218
NoodleOfDeath

バイナリ比較 をしない限り、大文字と小文字は区別されません

455
Marc B

値と渡されたパラメータを小文字にすることができます。

SELECT * FROM `table` WHERE LOWER(`Value`) = LOWER("IAreSavage")

別の(より良い)方法は、ドキュメントの中で で述べられているようにCOLLATE演算子を使うことです

105
Colin Hebert

バイナリの使用

これは単純な選択です

SELECT * FROM myTable WHERE 'something' = 'Something'

= 1

これはバイナリ付きの選択です

SELECT * FROM myTable WHERE BINARY 'something' = 'Something'

または

SELECT * FROM myTable WHERE 'something' = BINARY 'Something'

= 0

48
Someone

列が_ciで終わる照合順序(defaultlatin1_general_ci照合順序など)を使用する場合、比較では大文字と小文字が区別されず_csまたは_binで終わる照合順序を使用する場合は、大文字と小文字が区別されますutf8_unicode_csおよびutf8_bin照合順序など)。

照合を確認する

あなたはserverdatabaseそして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;

比較では大文字と小文字が区別されます。

32
ostrokach

WHERE句の文字列比較では大文字と小文字が区別されません。あなたが使用して比較することを試みることができます

WHERE `colname` = 'keyword'

または

WHERE `colname` = 'KeyWord'

あなたは同じ結果を得るでしょう。これはMySQLのデフォルトの動作です。

比較を大文字と小文字を区別にする場合は、次のようにCOLLATEname__を追加します。

WHERE `colname` COLLATE latin1_general_cs = 'KeyWord'

そのSQLでは、これとは異なる結果になります。WHERE colnameCOLLATE latin1_general_cs = 'keyword'

latin1_general_csは、ほとんどのデータベースで共通またはデフォルトの照合順序です。

25
Ifan Iqbal

選択した照合順序は、大文字と小文字が区別されるかどうかに関係なく設定されます。

16
chuck taylor

デフォルトでは大文字と小文字が区別されませんが、次に検討する必要がある最も重要なことは、テーブルの作成時に大文字と小文字の区別を指定できるため、まずテーブルの作成方法です。

以下のスクリプトはテーブルを作成します。一番下の方に、「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;

自分のテーブルを作成できるようなプロジェクトの場合は、テーブルを作成するときに大文字と小文字の区別を設定することをお勧めします。

9
Ken Johnson

SQL Selectでは大文字と小文字が区別されません。

このリンクをクリックすると、大文字と小文字が区別されます。 http://web.archive.org/web/20080811231016/http://sqlserver2000.databases.aspfaq.com:80/how-can-i- make-my-sql-query-case-sensitive.html

4
Jacob Nelson

試してみてください。

order by lower(column_name) asc;
3
VS-java

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

2
Wes Grant

バイナリフラグが設定された文字列フィールドでは、常に大文字と小文字が区別されます。非バイナリテキストフィールドの大文字と小文字を区別した検索が必要な場合は、これを使用します。SELECT 'test' REGEXP BINARY 'TEST' AS RESULT;

0
user2288580

あなたはそれを試すことができます。それが役に立つことを願っています。

SELECT * FROM `table` WHERE `Value` COLLATE latin1_general_cs = "IAreSavage"
0
Zahid