[PHP]Ignorer les accents dans une requête sql
Résolu/Fermé
gezaakk
Messages postés
382
Date d'inscription
jeudi 27 mai 2010
Statut
Membre
Dernière intervention
26 mai 2015
-
22 nov. 2011 à 14:37
astuces72 Messages postés 7762 Date d'inscription vendredi 15 janvier 2010 Statut Membre Dernière intervention 15 novembre 2024 - 27 juin 2015 à 00:11
astuces72 Messages postés 7762 Date d'inscription vendredi 15 janvier 2010 Statut Membre Dernière intervention 15 novembre 2024 - 27 juin 2015 à 00:11
A voir également:
- Sql ignore accents
- Votre message a été lu et ignoré avec succès - Forum Facebook Messenger
- Comment savoir si le message a été lu ? - Forum iPhone
- J'envoie un message à une amie et je n'ai pas de preuve que mon message a été lu ✓ - Forum Réseaux sociaux
- Logiciel sql - Télécharger - Bases de données
- Requête sql date supérieure à ✓ - Forum Programmation
16 réponses
gezaakk
Messages postés
382
Date d'inscription
jeudi 27 mai 2010
Statut
Membre
Dernière intervention
26 mai 2015
34
22 nov. 2011 à 20:19
22 nov. 2011 à 20:19
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
graffx
Messages postés
6506
Date d'inscription
jeudi 22 mars 2007
Statut
Contributeur
Dernière intervention
24 mars 2019
1 975
22 nov. 2011 à 20:59
22 nov. 2011 à 20:59
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;
jojo673
Messages postés
210
Date d'inscription
lundi 19 septembre 2011
Statut
Membre
Dernière intervention
9 avril 2014
44
22 nov. 2011 à 15:34
22 nov. 2011 à 15:34
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
dam75
Messages postés
1041
Date d'inscription
lundi 4 mai 2009
Statut
Webmaster
Dernière intervention
21 février 2023
67
Modifié par dam75 le 22/11/2011 à 21:39
Modifié par dam75 le 22/11/2011 à 21:39
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+++
astuces72
Messages postés
7762
Date d'inscription
vendredi 15 janvier 2010
Statut
Membre
Dernière intervention
15 novembre 2024
1 639
27 juin 2015 à 00:11
27 juin 2015 à 00:11
merci à toi dam75, ton message date, mais les explications claires mon bien aidé
:)
:)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
gezaakk
Messages postés
382
Date d'inscription
jeudi 27 mai 2010
Statut
Membre
Dernière intervention
26 mai 2015
34
22 nov. 2011 à 23:15
22 nov. 2011 à 23:15
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 ...
gezaakk
Messages postés
382
Date d'inscription
jeudi 27 mai 2010
Statut
Membre
Dernière intervention
26 mai 2015
34
22 nov. 2011 à 23:36
22 nov. 2011 à 23:36
ma base est COLLATE utf8_general_ci par défaut
gezaakk
Messages postés
382
Date d'inscription
jeudi 27 mai 2010
Statut
Membre
Dernière intervention
26 mai 2015
34
22 nov. 2011 à 23:59
22 nov. 2011 à 23:59
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?
dam75
Messages postés
1041
Date d'inscription
lundi 4 mai 2009
Statut
Webmaster
Dernière intervention
21 février 2023
67
23 nov. 2011 à 10:02
23 nov. 2011 à 10:02
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 :)
gezaakk
Messages postés
382
Date d'inscription
jeudi 27 mai 2010
Statut
Membre
Dernière intervention
26 mai 2015
34
23 nov. 2011 à 13:29
23 nov. 2011 à 13:29
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>";
}
}
gezaakk
Messages postés
382
Date d'inscription
jeudi 27 mai 2010
Statut
Membre
Dernière intervention
26 mai 2015
34
23 nov. 2011 à 13:40
23 nov. 2011 à 13:40
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
dam75
Messages postés
1041
Date d'inscription
lundi 4 mai 2009
Statut
Webmaster
Dernière intervention
21 février 2023
67
23 nov. 2011 à 18:06
23 nov. 2011 à 18:06
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 :)
gezaakk
Messages postés
382
Date d'inscription
jeudi 27 mai 2010
Statut
Membre
Dernière intervention
26 mai 2015
34
23 nov. 2011 à 20:19
23 nov. 2011 à 20:19
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>";
}
}
Anoen
Messages postés
196
Date d'inscription
mardi 10 novembre 2009
Statut
Membre
Dernière intervention
11 septembre 2013
25
24 nov. 2011 à 00:34
24 nov. 2011 à 00:34
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());
jojo673
Messages postés
210
Date d'inscription
lundi 19 septembre 2011
Statut
Membre
Dernière intervention
9 avril 2014
44
24 nov. 2011 à 09:09
24 nov. 2011 à 09:09
Retour à la case départ :)
gezaakk
Messages postés
382
Date d'inscription
jeudi 27 mai 2010
Statut
Membre
Dernière intervention
26 mai 2015
34
24 nov. 2011 à 09:15
24 nov. 2011 à 09:15
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
jojo673
Messages postés
210
Date d'inscription
lundi 19 septembre 2011
Statut
Membre
Dernière intervention
9 avril 2014
44
24 nov. 2011 à 09:19
24 nov. 2011 à 09:19
Essaye d'ajouter cette ligne avant toute requête :
mysql_query("SET NAMES 'utf8'");
gezaakk
Messages postés
382
Date d'inscription
jeudi 27 mai 2010
Statut
Membre
Dernière intervention
26 mai 2015
34
24 nov. 2011 à 09:22
24 nov. 2011 à 09:22
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
gezaakk
Messages postés
382
Date d'inscription
jeudi 27 mai 2010
Statut
Membre
Dernière intervention
26 mai 2015
34
24 nov. 2011 à 09:28
24 nov. 2011 à 09:28
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
mysql_query("SET NAMES 'utf8'");
car comme ca les accen sont ignoré dans la le select
gezaakk
Messages postés
382
Date d'inscription
jeudi 27 mai 2010
Statut
Membre
Dernière intervention
26 mai 2015
34
24 nov. 2011 à 15:03
24 nov. 2011 à 15:03
Merci tous a votre aide précieuse
Cordialement
Cordialement