[PHP]Ignorer les accents dans une requête sql

[Résolu/Fermé]
Signaler
Messages postés
380
Date d'inscription
jeudi 27 mai 2010
Statut
Membre
Dernière intervention
26 mai 2015
-
Messages postés
6528
Date d'inscription
vendredi 15 janvier 2010
Statut
Membre
Dernière intervention
31 juillet 2021
-
Salut,
J'ai un petit problème avec une requête sql 'select'.
Comme j'ai indiquer dans le titre, je veut que la requête ignore les accents.
Par exemple si quelqu'un tape Telecharger il doit avoir dans les résultats de la requête Telecharger et aussi Télécharger avec des accents .

Merci d'avance


16 réponses

Messages postés
380
Date d'inscription
jeudi 27 mai 2010
Statut
Membre
Dernière intervention
26 mai 2015
30
merci mais j'ai déjà effectuer des recherches sur google et ta solution est pour Microsoft SQL Server , moi je travaille sur php alors ma base de donnée est gérer par EasyPhp et non pas sur Microsoft SQL Server .
Y a pas une solution similaire pour EasyPhp ?
Cordialement
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65492 internautes nous ont dit merci ce mois-ci

Messages postés
6422
Date d'inscription
jeudi 22 mars 2007
Statut
Contributeur
Dernière intervention
24 mars 2019
1 935
Il ne faut pas confondre contenant et contenu, sa repnse n' est pas mauvaise.

SQL est un language, easyphp un logiciel.


donc:

SELECT * FROM MY_TABLE WHERE MY_TABLE.STR LIKE '%Libellé%'
COLLATE SQL_Latin1_General_Cp437_CI_AI;

1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65492 internautes nous ont dit merci ce mois-ci

Messages postés
210
Date d'inscription
lundi 19 septembre 2011
Statut
Membre
Dernière intervention
9 avril 2014
44
Messages postés
1041
Date d'inscription
lundi 4 mai 2009
Statut
Webmaster
Dernière intervention
21 avril 2020
62
Hello,

Bonne réponse :)

Précisions : sur 99% des instances de MySQL déployées, ce que tu demandes est vrai par défaut :) ... tout cela parce que MySQL, édité à l'origine par une société suédoise, implémente par défaut la collation latin1_swedish_ci, qui se trouve être insensible aux accents !

Attention ceci dit : la collation dépend du "character set", autrement dit si ta table est UTF-8, il faut utiliser une collation adaptée :

SELECT * FROM MY_TABLE WHERE MY_TABLE.STR LIKE '%Libellé%'  
COLLATE utf8_general_ci;


Et si elle est en Latin1 (le cas par défaut, donc le plus courant) :
SELECT * FROM MY_TABLE WHERE MY_TABLE.STR LIKE '%Libellé%'  
COLLATE latin1_swedish_ci;


A noter enfin que si la collation de la table ou de la base ou du serveur par défaut est une de celles-ci, il sera inutile de les préciser dans chacune des requêtes.

Ces 2 collations sont insensibles à la casse et aux accents. Par contre attention, latin1_general_ci est insensible à la casse MAIS sensible aux accents ... les mystères des collations, il y en a beaucoup à dire :)

Pour avoir les collations sensibles aux accents, tu peux utiliser latin1_bin / utf8_bin.

Plus d'infos :
http://dev.mysql.com/doc/refman/5.0/fr/charset-collation-charset.html
http://dev.mysql.com/doc/refman/5.0/fr/charset-defaults.html
http://dev.mysql.com/doc/refman/5.0/fr/charset-collate.html

A+++
Messages postés
6528
Date d'inscription
vendredi 15 janvier 2010
Statut
Membre
Dernière intervention
31 juillet 2021
1 567
merci à toi dam75, ton message date, mais les explications claires mon bien aidé
:)
Messages postés
380
Date d'inscription
jeudi 27 mai 2010
Statut
Membre
Dernière intervention
26 mai 2015
30
Salut
Merci pour les informations c'est géniale, mais j'ai un problème avec COLLATE


Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in D:\php\EasyPHP-5.3.8.1\EasyPHP-5.3.8.1\www\21.nov.2011\index.php on line ...
Messages postés
380
Date d'inscription
jeudi 27 mai 2010
Statut
Membre
Dernière intervention
26 mai 2015
30
ma base est COLLATE utf8_general_ci par défaut
Messages postés
380
Date d'inscription
jeudi 27 mai 2010
Statut
Membre
Dernière intervention
26 mai 2015
30
voici ma requête
SELECT * FROM forum where forum.tit_suj like '%".$res."%'

elle est sensible aux accents et ma base est COLLATE utf8_general_ci par défaut.
et quand je la modifie en
SELECT * FROM forum where forum.tit_suj like '%".$res."%' COLLATE utf8_general_ci

j'ai une erreur
Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in D:\php\EasyPHP-5.3.8.1\EasyPHP-5.3.8.1\www\21.nov.2011\index.php on line ...

y a pas une autre solution?
Messages postés
1041
Date d'inscription
lundi 4 mai 2009
Statut
Webmaster
Dernière intervention
21 avril 2020
62
Salut,

Si ta base (ta table en fait) est en utf8_general_ci ET que ton champ est bien en character_sert UTF8, tu ne devrais pas avoir besoin de rajouter COLLATE à ta requête, puisque c'est la collation par défaut ...

Pour voir le character set de ta table :
SHOW CREATE TABLE MyTable;

Ca te dira à la fin un truc du genre DEFAULT CHARSET=utf8 : s'il n'y a pas de collate, c'est que tu est déjà en utf8_general_ci ...

Pour voir le character set d'un champ : même commande, mais pour un champ donné, tu pourrais avoir un truc du genre :
...
MyString varchar(32) CHARACTER SET latin1 NOT NULL,
...

S'il y a des incohérences (genre un champ en latin1 dans une table UTF-8, ça peut provoquer des erreurs du type
"Illegal mix of collations ..."

1/ Il faut que tu arrives à voir ces erreurs : dans ce que tu nous montres, ta requête te renvoie FALSE parce qu'il y a eu une erreur, mais il faudrait voir laquelle !
(fonction PHP mysql_error, ou en POO mysqli_handler->error() par exemple)

2/ Si c'est bien un mélange de collations "interdit" : tu peux par exemple écrire ainsi ta requête pour contourner le problème
SELECT * FROM forum where forum.tit_suj COLLATE latin1_swedish_ci like '%".$res."%' COLLATE utf8_general_ci;

... mais le plus propre si tu peux serait de nettoyer ta structure de tables : si TOUT est cohérent (connexion + serveur + base + tables + champs), tu ne devrais jamais avoir ce genre de problèmes :)
Messages postés
380
Date d'inscription
jeudi 27 mai 2010
Statut
Membre
Dernière intervention
26 mai 2015
30
La table et les champs sont tout en utf8_general_ci , mais toujours la requête prend compte les accents , Bizarre

if (isset($submit)){
$result = mysql_query("SELECT * FROM forum where forum.tit_suj like '%".$res."%' ") ;
while($data= mysql_fetch_array($result)){
echo $data['tit_suj'];
echo "<br>";
}
}
Messages postés
380
Date d'inscription
jeudi 27 mai 2010
Statut
Membre
Dernière intervention
26 mai 2015
30
ET avec
SELECT * FROM forum where forum.tit_suj COLLATE latin1_swedish_ci like '%".$res."%' COLLATE utf8_general_ci;

j'ai toujours une erreur

Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in D:\php\EasyPHP-5.3.8.1\EasyPHP-5.3.8.1\www\21.nov.2011\index.php on line 197
Messages postés
1041
Date d'inscription
lundi 4 mai 2009
Statut
Webmaster
Dernière intervention
21 avril 2020
62
Comme je te l'ai dit, il faudrait que tu aies l'erreur en question ... là, ce n'est pas possible de savoir ce qui se passe :)
Messages postés
380
Date d'inscription
jeudi 27 mai 2010
Statut
Membre
Dernière intervention
26 mai 2015
30
L'erreur pointe vers cette ligne:
while($data= mysql_fetch_array($result)){



f (isset($submit)){
$result = mysql_query("SELECT * FROM forum where forum.tit_suj like '%".$res."%' ") ;
while($data= mysql_fetch_array($result)){
echo $data['tit_suj'];
echo "<br>";
}
}
Messages postés
196
Date d'inscription
mardi 10 novembre 2009
Statut
Membre
Dernière intervention
11 septembre 2013
25
Ca ressemble à une erreur de requête. Je te suggère de faire ça :
$result = mysql_query("SELECT * FROM forum where forum.tit_suj like '%".$res."%' ") or die(mysql_error()); 
Messages postés
210
Date d'inscription
lundi 19 septembre 2011
Statut
Membre
Dernière intervention
9 avril 2014
44
Retour à la case départ :)
Messages postés
380
Date d'inscription
jeudi 27 mai 2010
Statut
Membre
Dernière intervention
26 mai 2015
30
ici
if (isset($submit)){
$result = mysql_query("SELECT * FROM forum where forum.tit_suj like '%".$res."%' COLLATE utf8_general_ci ") or die(mysql_error()) ;
while($data= mysql_fetch_array($result)){
echo $data['tit_suj'];
echo "<br>";
}
}

Erreur
COLLATION 'utf8_general_ci' is not valid for CHARACTER SET 'latin1'


(la base ,la table et le champ sont en utf8_general_ci
Messages postés
210
Date d'inscription
lundi 19 septembre 2011
Statut
Membre
Dernière intervention
9 avril 2014
44
Essaye d'ajouter cette ligne avant toute requête :
mysql_query("SET NAMES 'utf8'");
Messages postés
380
Date d'inscription
jeudi 27 mai 2010
Statut
Membre
Dernière intervention
26 mai 2015
30
j'ai constaté que quand je fait un enregistrement du mot Télécharger par ex, dans la base il devient Télécharger

ok je vais essayer
Messages postés
380
Date d'inscription
jeudi 27 mai 2010
Statut
Membre
Dernière intervention
26 mai 2015
30
meme dans une requete insert ou update je met
mysql_query("SET NAMES 'utf8'");

car comme ca les accen sont ignoré dans la le select
Messages postés
380
Date d'inscription
jeudi 27 mai 2010
Statut
Membre
Dernière intervention
26 mai 2015
30
Merci tous a votre aide précieuse

Cordialement