MySQL SELECT
クエリがデフォルトで大文字と小文字を区別するか区別しないかを誰かに教えてもらえますか?そうでない場合、次のようなことを行うためにどのクエリを送信する必要がありますか?
SELECT * FROM `table` WHERE `Value` = "iaresavage"
実際には、の真の値はValue
ですIAreSavage
。
'value' in ('val1', 'val2', 'val3')
MySQL SELECT
クエリがデフォルトで大文字と小文字を区別するか区別しないかを誰かに教えてもらえますか?そうでない場合、次のようなことを行うためにどのクエリを送信する必要がありますか?
SELECT * FROM `table` WHERE `Value` = "iaresavage"
実際には、の真の値はValue
ですIAreSavage
。
'value' in ('val1', 'val2', 'val3')
回答:
彼らは、あるケース小文字を区別しないあなたがない限り、バイナリ比較を。
値と渡されたパラメータを小文字にすることができます:
SELECT * FROM `table` WHERE LOWER(`Value`) = LOWER("IAreSavage")
SELECT
文はそのときどのように見えるでしょうCOLLATE
か?
LOWER()
または任意のCOLLATE
句などの文字列変換を使用すると、インデックスを完全にバイパスできます。また、時間の経過とともに、テーブルが大きくなると、パフォーマンスに大きな影響を与える可能性があります。おそらくこれらはあなたが探しているユーザー名ですか?大文字と小文字を区別しない照合を使用して、一意のインデックスを列に追加します。EXPLAIN
インデックスが使用されていることを確認するために使用します。
バイナリを使用
これは簡単な選択です
SELECT * FROM myTable WHERE 'something' = 'Something'
= 1
これはバイナリの選択です
SELECT * FROM myTable WHERE BINARY 'something' = 'Something'
または
SELECT * FROM myTable WHERE 'something' = BINARY 'Something'
= 0
比較は、列が(デフォルトの照合など)で終わる照合を使用する場合、大文字と小文字を区別しません。また、列が、または(およびなど)で終わる照合を使用する場合、大文字と小文字を区別します。_ci
latin1_general_ci
_cs
_bin
utf8_unicode_cs
utf8_bin
照合します)。
以下を使用して、サーバー、データベース、接続の照合順序を確認できます。
mysql> show variables like '%collation%';
+----------------------+-------------------+
| Variable_name | Value |
+----------------------+-------------------+
| collation_connection | utf8_general_ci |
| collation_database | latin1_swedish_ci |
| collation_server | latin1_swedish_ci |
+----------------------+-------------------+
そしてあなたはあなたを使ってテーブルの照合をチェックすることができます:
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
。
WHERE `colname` COLLATE latin1_general_cs = 'KeyWord'
このSQLでは、次のような結果になりますcolname
。WHERECOLLATE 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-queries-case-sensitive.html
また、lower_case_table_name
configディレクティブを1に設定しない限り、Linuxではテーブル名の大文字と小文字が区別されることに注意してください。これは、テーブルがLinuxでは大文字と小文字を区別するファイルで表されるためです。
特に、大文字と小文字を区別しないWindowsでの開発と、それが存在する本番環境への展開には注意してください。例えば:
"SELECT * from mytable"
テーブルmyTableに対して、上記のディレクティブが設定されていない限り、Windowsでは成功しますがLinuxでは失敗します。
ここで参照:http : //dev.mysql.com/doc/refman/5.0/en/identifier-case-sensitiveivity.html
lower_case_table_name
コメントの下で指定されているようにを変更してみてください
現在受け入れられているソリューションはほとんどです正しいです。
非バイナリ文字列(CHAR、VARCHAR、TEXT)を使用している場合、比較では大文字と小文字が区別されません、デフォルトの照合で。
バイナリ文字列(BINARY、VARBINARY、BLOB)を使用している場合、比較では大文字と小文字が区別されるため、以下を使用する必要があります。 LOWER
て、他の回答で説明されているようにます。
デフォルトの照合を使用しておらず、非バイナリ文字列を使用している場合、大文字と小文字の区別は選択した照合によって決定されます。
ソース:https : //dev.mysql.com/doc/refman/8.0/en/case-sensitiveivity.html。よく読んでください。他の人は、比較は必然的に大文字と小文字を区別するか区別しないと言うのを誤解しました。これはそうではありません。
バイナリフラグが設定された文字列フィールドでは、常に大文字と小文字が区別されます。バイナリ以外のテキストフィールドの大文字と小文字を区別する検索が必要な場合は、次を使用します。SELECT 'test' REGEXP BINARY 'TEST' AS RESULT;