SQL : faire un select indifférent aux caractère spéciaux

Sainte-Rose
WRInaute discret
WRInaute discret
 
Messages: 87
Inscription: 29 Jan 2007

SQL : faire un select indifférent aux caractère spéciaux

Message le Mer Fév 28, 2007 13:59

Bonjour à tous,

Je débute en SQL et je recherche une fonction :

Je veux que la requete extrait tout les résultats pour lesquels le champ lieu contient une valeur, mais je voudrais qu'il ne tienne pas compte des caractères spéciaux.

Exemple :
Si je recherche "ecomusee", je veux qu'il sorte "ecomusee", mais aussi "écomusée" et "Ecomusée".

Quel méthode utiliser pour cela ?

Merci

PS: Si cela interesse quelqu'un, je reprogramme phpmyevents.

Selection A
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 279
Inscription: 14 Mar 2005

Message le Mer Fév 28, 2007 14:46

Il faudrait que tu utilses une collation utf8_unicode_ci pour le champs de ta table MySQL en question.

Tes SELECTs devraient normalement être insensibles à la casse et à l'accentuation.

Sainte-Rose
WRInaute discret
WRInaute discret
 
Messages: 87
Inscription: 29 Jan 2007

Message le Mer Fév 28, 2007 15:23

Les champs sont encodés en latin1_general_ci.
C'est censé être insensible à la casse aussi, isn't it ?

Mon site est en iso, donc je code en iso. Je ne pense pas pouvoir faire autrement ?

La ligne de code est la suivante. $tableAgenda est le nom de la table explorée, manif le champ à explorer, et $non une variable récupérée dans un formulaire.

Code: Tout sélectionner
$query_tous=mysql_query("select * from $tableAgenda where manif like '%$nom%' and etat=1 order by date_deb"


KOogar
WRInaute accro
WRInaute accro
 
Messages: 3974
Inscription: 16 Nov 2004

Message le Mer Fév 28, 2007 18:05

LIKE est insensible a la casse, donc ne fait pas la difference entre Maj et min, les histoire d'accent n'ont rien a voir et seront gerer. Par contre on peut rendre LIKE sensible a la casse en passant la chaine en binaire :

Code: Tout sélectionner
SELECT 'sources' LIKE 'SOURCES';
        retourne 1
SELECT 'sources' LIKE BINARY 'SOURCES';
        retourne 0

Dan_A
WRInaute discret
WRInaute discret
 
Messages: 183
Inscription: 21 Déc 2005

Message le Mer Fév 28, 2007 18:56

Mon site est en iso, donc je code en iso.

La base peut utiliser n'importe quel codage et html n'importe quel autre.
La sensibilité à la casse peut être déclarée si nécessaire dans le champ de la table.
Dans certains cas, il faut utiliser les fonctions d'encodage/décodage du langage utilisé, mais c'est très rare.


KOogar
WRInaute accro
WRInaute accro
 
Messages: 3974
Inscription: 16 Nov 2004

Message le Mer Fév 28, 2007 19:13

Dan_A a écrit:La sensibilité à la casse peut être déclarée si nécessaire dans le champ de la table.


Un exemple ?

Dan_A
WRInaute discret
WRInaute discret
 
Messages: 183
Inscription: 21 Déc 2005

Message le Mer Fév 28, 2007 19:25

Dans la rubrique Interclassement, si je choisis
latin1_general_ci (case insensitive) le texte sera insensible à la casse
si je choisis latin1_general_cs il sera sensible à la casse.
Pour utf8 il faut choisir bin ou unicode_ci

Pour répondre à la question posée, il faut effectivement utiliser utf8_unicode_ci et like avec une regexp.


KOogar
WRInaute accro
WRInaute accro
 
Messages: 3974
Inscription: 16 Nov 2004

Message le Mer Fév 28, 2007 19:46

Dan_A a écrit:Dans la rubrique Interclassement, si je choisis
latin1_general_ci (case insensitive) le texte sera insensible à la casse
si je choisis latin1_general_cs il sera sensible à la casse.


Ca ne repond pas du tout a la question. La sensibilité à la casse NE peut PAS être déclarée dans le champ de la table.

On parle de sensiblité a la casse seulement lorsqu'il s'agit de recherche.

Ensuit tu dis:
>> il faut effectivement utiliser utf8_unicode_ci et like avec une regexp

Ca veux dire quoi au juste tout ca ? On utilise soit LIKE, soit REGEXP mais pas les 2 en meme temps.

Dan_A
WRInaute discret
WRInaute discret
 
Messages: 183
Inscription: 21 Déc 2005

Message le Mer Fév 28, 2007 19:55

il faut effectivement utiliser utf8_unicode_ci et like ou regexp

Sainte-Rose
WRInaute discret
WRInaute discret
 
Messages: 87
Inscription: 29 Jan 2007

Message le Mer Fév 28, 2007 20:43

J'ai mis ma base en utf8_general_ci pour les champ que je veux interroger. Ca fonctionne et ca ne pose pas problème de reprendre les résultats dans une page en iso.


Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité