[PHP]Ignorer les accents dans une requête sql
Résolu
gezaakk
Messages postés
382
Date d'inscription
Statut
Membre
Dernière intervention
-
astuces72 Messages postés 7769 Date d'inscription Statut Membre Dernière intervention -
astuces72 Messages postés 7769 Date d'inscription Statut Membre Dernière intervention -
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
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
A voir également:
- Sql ignore accents
- Logiciel sql - Télécharger - Bases de données
- Lettres avec accents - Guide
- Ignoré de ils m'ont ajouté snap - Forum Snapchat
- Sql (+) - Forum Programmation
- Votre message a été lu et ignoré avec succès - Forum Facebook Messenger
16 réponses
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
Y a pas une solution similaire pour EasyPhp ?
Cordialement
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;
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;
Rien de mieux qu'une recherche sur google ...
http://johannes-fetz.blogspot.com/2009/10/select-non-sensible-aux-accents-avec.html
http://johannes-fetz.blogspot.com/2009/10/select-non-sensible-aux-accents-avec.html
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 :
Et si elle est en Latin1 (le cas par défaut, donc le plus courant) :
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+++
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+++
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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 ...
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 ...
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?
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?
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 :
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
... 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 :)
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 :)
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>";
}
}
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>";
}
}
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
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
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>";
}
}
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>";
}
}
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());
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
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
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
ok je vais essayer