MySQLのデフォルトでは、条件で文字列が検出される場合、大文字と小文字は区別されません。
次の2つのSQLステートメントの結果は同じです。
MySQL [datawarehouse]> select * from temp_01 t where browser = 'ie:11' limit 3;
+-----+----------+-----------+---------+--------+
| id | platform | version | browser | counts |
+-----+----------+-----------+---------+--------+
| 48 | 1 | website:1 | IE:11 | 70 |
| 117 | 20 | website:1 | IE:11 | 70 |
+-----+----------+-----------+---------+--------+
2 rows in set (0.01 sec)
MySQL [datawarehouse]> select * from temp_01 t where browser = 'IE:11' limit 3;
+-----+----------+-----------+---------+--------+
| id | platform | version | browser | counts |
+-----+----------+-----------+---------+--------+
| 48 | 1 | website:1 | IE:11 | 70 |
| 117 | 20 | website:1 | IE:11 | 70 |
+-----+----------+-----------+---------+--------+
2 rows in set (0.01 sec)
解決策1:
テーブルを作成するときに、文字列フィールドの後にキーワードを追加しますBINARY
--创建相同结果的表,将browser字段加上关键字BINARY
CREATE TABLE `temp_02` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`platform` int(10) DEFAULT NULL,
`version` varchar(50) DEFAULT NULL,
`browser` varchar(50) BINARY DEFAULT NULL,
`counts` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=181 DEFAULT CHARSET=utf8;
--将temp_01表的数据导入temp_02中
insert into temp_02(id, platform, version, browser, counts) select id, platform, version, browser, counts from temp_01;
このクエリの結果は完全に異なります
MySQL [datawarehouse]> select * from temp_02 t where browser = 'ie:11' limit 3;
Empty set (0.00 sec)
;
MySQL [datawarehouse]> select * from temp_02 t where browser = 'IE:11' limit 3;
+-----+----------+-----------+---------+--------+
| id | platform | version | browser | counts |
+-----+----------+-----------+---------+--------+
| 48 | 1 | website:1 | IE:11 | 70 |
| 117 | 20 | website:1 | IE:11 | 70 |
+-----+----------+-----------+---------+--------+
2 rows in set (0.00 sec)
解決策2:
条件付き文字列フィールドのクエリステートメントの前にキーワードを追加します。BINARY
MySQL [datawarehouse]> select * from temp_01 t where BINARY browser = 'IE:11' and version = 'Website:1' limit 3;
+-----+----------+-----------+---------+--------+
| id | platform | version | browser | counts |
+-----+----------+-----------+---------+--------+
| 48 | 1 | website:1 | IE:11 | 70 |
| 117 | 20 | website:1 | IE:11 | 70 |
+-----+----------+-----------+---------+--------+
2 rows in set (0.00 sec)
MySQL [datawarehouse]> select * from temp_01 t where BINARY browser = 'IE:11' and BINARY version = 'Website:1' limit 3;
Empty set (0.00 sec)
解決策3:
フィールドの文字セットを変更します。
- utf8_general_ci ---大文字と小文字を区別しない
- utf8_bin-大文字と小文字を区別
MySQL [datawarehouse]> ALTER TABLE temp_01 MODIFY COLUMN browser VARCHAR(50) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL;
Query OK, 180 rows affected (0.01 sec)
Records: 180 Duplicates: 0 Warnings: 0
MySQL [datawarehouse]>
MySQL [datawarehouse]> select * from temp_01 t where browser = 'ie:11' limit 3;
Empty set (0.00 sec)