MySQL's donde la cadena de condición distingue entre mayúsculas y minúsculas

Por defecto en MySQL, donde las condiciones encuentran cadenas no distinguen entre mayúsculas y minúsculas.

Los resultados de las siguientes dos sentencias SQL son los mismos:

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)

Solución uno:

Agregue palabras clave después del campo de cadena cuando cree la tablaBINARY

--创建相同结果的表,将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;

El resultado de esta consulta es completamente diferente

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)

Solución dos:

Agregue palabras clave antes de la declaración de consulta donde el campo de cadena condicional: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)

Solución tres:

Modifique el juego de caracteres del campo:

  • utf8_general_ci --- no distingue entre mayúsculas y minúsculas
  • utf8_bin-distingue entre mayúsculas y minúsculas
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)

Supongo que te gusta

Origin blog.csdn.net/lz6363/article/details/107441840
Recomendado
Clasificación