2010-06-30 2 views

Répondre

25

Faites quelque chose comme ceci:

SELECT user 
FROM users 
WHERE UPPER(user) = UPPER('moustafa'); 

Fondamentalement vous convertissez votre résultat à un cas et comparez-le par rapport au terme de recherche qui est également converti en majuscules, ignorant ainsi le cas.

+4

+1: La conduite des deux côtés de l'évaluation dans le même cas (UPPER ou LOWER) fournira une recherche insensible à la casse. Avertissement: L'utilisation d'une fonction sur la colonne n'utilisera pas d'index s'il en existe un. –

6

Généralement, vous devez utiliser WHERE UPPER (COLUMNNAME) = UPPER ('valuetocompare').

Alternativement, vous culd utilisez where upper (Columnname) comme UPPER ('% ValueToCompare%) si vous voulez faire une recherche de sous-chaîne

1

vous pouvez stocker les données dans le mySQL en minuscules et juste effectuer des requêtes dessus.

17

Les fonctions UPPER et LOWER peuvent être utilisés, mais vous pouvez également affecter la sensibilité à la casse en sélectionnant le type classement approprié et/ou de la colonne.

Par exemple, latin1_general_cs est sensible à la casse à la fois VARCHAR et VARBINARY:

DROP TABLE IF EXISTS `case_sensitive`; 
CREATE TABLE `case_sensitive` (
    `id` INT NOT NULL AUTO_INCREMENT, 
    `nonbinary` VARCHAR(255), 
    `binary` VARBINARY(255), 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB COLLATE latin1_general_cs; 

INSERT INTO `case_sensitive` (`nonbinary`, `binary`) VALUES ('A', 'A'); 

SELECT * FROM `case_sensitive` WHERE `nonbinary` = 'A'; 

+----+-----------+--------+ 
| id | nonbinary | binary | 
+----+-----------+--------+ 
| 1 | A   | A  | 
+----+-----------+--------+ 
1 row in set (0.00 sec) 

SELECT * FROM `case_sensitive` WHERE `binary` = 'A'; 

+----+-----------+--------+ 
| id | nonbinary | binary | 
+----+-----------+--------+ 
| 1 | A   | A  | 
+----+-----------+--------+ 
1 row in set (0.00 sec) 

SELECT * FROM `case_sensitive` WHERE `nonbinary` = 'a'; 

Empty set (0.00 sec) 

SELECT * FROM `case_sensitive` WHERE `binary` = 'a'; 

Empty set (0.00 sec) 

Alors que latin1_general_ci est insensible à la casse avec VARCHAR, et sensible à la casse avec VARBINARY:

DROP TABLE IF EXISTS `case_insensitive`; 
CREATE TABLE `case_insensitive` (
    `id` INT NOT NULL AUTO_INCREMENT, 
    `nonbinary` VARCHAR(255), 
    `binary` VARBINARY(255), 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB COLLATE latin1_general_ci; 

INSERT INTO `case_insensitive` (`nonbinary`, `binary`) VALUES ('A', 'A'); 

SELECT * FROM `case_insensitive` WHERE `nonbinary` = 'A'; 

+----+-----------+--------+ 
| id | nonbinary | binary | 
+----+-----------+--------+ 
| 1 | A   | A  | 
+----+-----------+--------+ 
1 row in set (0.00 sec) 

SELECT * FROM `case_insensitive` WHERE `binary` = 'A'; 

+----+-----------+--------+ 
| id | nonbinary | binary | 
+----+-----------+--------+ 
| 1 | A   | A  | 
+----+-----------+--------+ 

SELECT * FROM `case_insensitive` WHERE `nonbinary` = 'a'; 

+----+-----------+--------+ 
| id | nonbinary | binary | 
+----+-----------+--------+ 
| 1 | A   | A  | 
+----+-----------+--------+ 

SELECT * FROM `case_insensitive` WHERE `binary` = 'a'; 

Empty set (0.00 sec) 

Vous devriez Choisissez donc un type de collation et de colonne le mieux adapté à vos besoins. Vous trouverez plus d'informations ici:

Sensibilité à la casse dans la chaîne Recherches
http://dev.mysql.com/doc/refman/5.1/en/case-sensitivity.html

Jeux de caractères et collation dans MySQL
http://dev.mysql.com/doc/refman/5.1/en/charset-mysql.html

Jeux de caractères et collation supportés par MySQL
http://dev.mysql.com/doc/refman/5.1/en/charset-charsets.html

2

j'utilise utf8_unicode_ (CI) -case-insensitive assembler sur la colonne votre recherche .... et cela fonctionne

0
SELECT * FROM table_name WHERE column_name1 LIKE '%A%' OR column_name1 LIKE '%a%'; 
+1

Seul le code de copier-coller ne suffit pas, vous devez expliquer ce qu'il fait et comment. – peterh

+1

@peterh convenu. –

Questions connexes