#1 Le 17/10/2014, à 16:11
- alex.jdgworld
[RESOLU] Probleme comparaison chaines avec accents dans requete Mysql
Bonjour à Tous
dans Mysql j'ai une table user avec dedans ceci :
name = FRéDéRIC pour FRéDéRIC
et j'ai un fichier qui contient FREDERIC sans accent
je lis le fichier en php et pour chaque enregistrement du fichier
je souhaite rechercher si il existe deja dans la table
et je n'y arrive pas .....
j'ai fait ceci mais cela ne fonctionne pas
$var_name_fichier = 'FREDERIC';
query_string = "select user_id , name
from user
WHERE name ='".$var_name_fichier."'";
comment puis je faire ?
D'avance merci a tous les GEEKS
Alex
Dernière modification par alex.jdgworld (Le 18/10/2014, à 09:14)
Hors ligne
#2 Le 17/10/2014, à 21:33
- αjet
Re : [RESOLU] Probleme comparaison chaines avec accents dans requete Mysql
Si tu lis un peu l'anglais, ca devrait t'aider un peu: http://stackoverflow.com/questions/1083 … e-in-utf-8
En resume:
1. Utlilise une collation insensible aux accents telle que utf8_general_ci pour ta colonne name.
2. Au lieu d'y mettre les entite html telle que é fait attention a bien stoquer le caractere correspondant a la place. Au besoin utilise une fonction html pour convertir les caractere accentues dans ta page html: http://php.net/manual/en/function.htmlspecialchars.php. Mieux, utilise un encodage tel que utf8 si possible pour eviter ce genre de probleme.
3. Dans ton select, utilise l'operateur LIKE a la place de = dans la clause WHERE.
Dernière modification par αjet (Le 17/10/2014, à 21:33)
αjet: ça se prononce alfajet, bordel ! | GMT+1 | Viens poueter avec moi, bordel ! | Mes photos | Shaarli | Fluidbuntu-fr
Hors ligne
#3 Le 18/10/2014, à 09:13
- alex.jdgworld
Re : [RESOLU] Probleme comparaison chaines avec accents dans requete Mysql
Bonjour
Merci αjet
j'ai fait plein d'essai avec les collations insensibles
mais pas réussi et je n'ai pas la possibilité de changer la methode de stockage dans la base,
c'est une base dont j'ai hérité telle quelle.....
par contre
j'ai résolu le probleme de cette maniere :
$var_name_fichier = 'FREDERIC';
query_string = "select user_id ,
UPPER(
REPLACE(
REPLACE(
REPLACE(
REPLACE( name, 'é' , 'E' ),
'ç', 'C'),
'è', 'E'),
'-', ' ')
) as f_name
from user
WHERE
UPPER(
REPLACE(
REPLACE(
REPLACE(
REPLACE( name, 'é' , 'E' ), ///// pour é
'ç', 'C'), ///// pour ç
'è', 'E'), ///// pour è
'-', ' ') ///// pour -
) ='".$var_name_fichier."'";
il n'y avait pas d'autres caracteres accentués donc j'ai fais le minimum
Merci
ALEX
Dernière modification par alex.jdgworld (Le 18/10/2014, à 09:37)
Hors ligne
#4 Le 18/10/2014, à 13:37
- αjet
Re : [RESOLU] Probleme comparaison chaines avec accents dans requete Mysql
Content que tu te sois debrouille. Juste une remarque, cette aproche risque d'etre difficile a maintenir. Par exemple si tu as la possibilite de faire des modifications sur le schema, il serait peut etre judicieux de rajouter un champ dans ta table user pour y enregistrer le nom sans accent, par exemple name_noaccent que tu utiliserait pour ta requete. Il faudrait aussi faire en sorte que cette colonne soit mise a jour si la valeur de name change.
αjet: ça se prononce alfajet, bordel ! | GMT+1 | Viens poueter avec moi, bordel ! | Mes photos | Shaarli | Fluidbuntu-fr
Hors ligne
#5 Le 23/10/2014, à 14:30
- alex.jdgworld
Re : [RESOLU] Probleme comparaison chaines avec accents dans requete Mysql
Salut αjet
merci αjet pour ton conseil de champ en double no_accent.
Mais je n'en aurai pas besoin : j'avais un fichier a inserrer dans une base deja aliment"e.
c'etait pour ne pas avoir de doublon, et comme le fichier ne contenait pas mail , j'ai du comparer avec les noms prénoms.
Merci encore
Alex
Hors ligne