Recherche SQL et accents

Therion.57
Invité n'ayant pas de compte PHPfrance

31 juil. 2010, 22:32

Bonjour,
J'ai passé mon après-midi à m'arracher les cheveux et à chercher une réponse sur Internet , sans succès.

Lors d'une requête SQL avec LIKE, je voudrais que le terme de la recherche soit insensible à la casse, ce qui est le cas, mais également insensible aux accents, ce qui ne fonctionne pas... A priori d'après ce que j'ai compris ce serait un problème de collation.

Mes tables sont en latin1_swedish_ci qui est sensé être insensible aux accents. Toutefois la page d'accueil de phpmyadmin m'indique 'Jeu de caractères pour MySQL: UTF-8 Unicode (utf8)' et ma page php ne s'affiche normalement que si je mets "charset=utf8" dans l'entête. Faut-il chercher de ce coté ?

Ma requête est :
"SELECT * from legend WHERE titre LIKE '%$req%'"
; où $req est le résultat du champs de recherche ayant juste subit une fonction "trim".
J'ai tenté d'ajouter des CONVERT à ma requête mais sans grand succès... J'ai pris le problème par l'autre bout avec des regex, mais avec le même résultat.

Pour info je me sers de mysql 5.0.51a.

Quelqu'un a t'il une idée sur la façon de procéder ?

ViPHP
ViPHP | 5462 Messages

31 juil. 2010, 23:50

hello, t'as essayé de faire ta requête direct dans phpmyadmin ?

Therion.57
Invité n'ayant pas de compte PHPfrance

01 août 2010, 06:54

Oui j'ai essayé. Et la c'est encore plus catastrophique puisque si je fais une recherche directement dans la base par exemple sur le mot "géant", ça ne marche ni avec 'geant' ni avec 'géant' mais seulement avec "géants". Il faut dire que c'est comme ça qu'il est enregistré dans la base. Il y a une erreur quelque part ?

ViPHP
ViPHP | 5462 Messages

01 août 2010, 17:00

Oui j'ai essayé. Et la c'est encore plus catastrophique puisque si je fais une recherche directement dans la base par exemple sur le mot "géant", ça ne marche ni avec 'geant' ni avec 'géant' mais seulement avec "géants". Il faut dire que c'est comme ça qu'il est enregistré dans la base. Il y a une erreur quelque part ?
met ta connection en latin1, dans l'onglet "variable" de phpmyadmin tout devrai être en gris

Petit nouveau ! | 7 Messages

01 août 2010, 18:05

Je ne suis pas sûr d'avoir compris :oops: Je ne trouve pas d'onglet "variable" dans phpmyadmin. J'ai bien les interclassements en latin1 (latin1_swedish_ci) dans les tables et dans l'accueil et le Jeu de caractères pour MySQL: UTF-8 Unicode (utf8) au dessus ne comporte pas de lien pour le modifier.

ViPHP
ViPHP | 5462 Messages

01 août 2010, 19:59

Je ne suis pas sûr d'avoir compris :oops: Je ne trouve pas d'onglet "variable" dans phpmyadmin. J'ai bien les interclassements en latin1 (latin1_swedish_ci) dans les tables et dans l'accueil et le Jeu de caractères pour MySQL: UTF-8 Unicode (utf8) au dessus ne comporte pas de lien pour le modifier.

dans l'accueil y'a un onglet variable normalement : http://localhost/phpmyadmin/server_variables.php
tu peux changer : Interclassement pour la connexion MySQL, c'est un menu déroulant :wink:

Petit nouveau ! | 7 Messages

01 août 2010, 21:08

Merci pour le lien ça a fait apparaitre de nouveaux onglets. Toutefois la liste des variables n'est pas modifiable... j'ai pourtant tous les privilèges sur cette base puisque c'est la mienne. Y a t'il un moyen de débloquer les modifications ?
Sur cette base de test il y a d'ailleurs un joyeux mélange de jeux de caractères vu les multiples tentatives que j'ai fait en testant différentes possibilités... Je n'ai toutefois pas touché à ma "vraie" base de données.

La base de mon serveur chez OVH, quand à elle, me fait une erreur 404 sur cette même recherche... Mais j'imagine que si j'importe ma base de test sur le serveur, les interclassements seront conservés ? Bref, c'est vraiment un domaine où je patauge :?

ViPHP
ViPHP | 5462 Messages

01 août 2010, 21:24

Merci pour le lien ça a fait apparaitre de nouveaux onglets. Toutefois la liste des variables n'est pas modifiable... j'ai pourtant tous les privilèges sur cette base puisque c'est la mienne. Y a t'il un moyen de débloquer les modifications ?
lequelles sont en orange ?
de toute facon c'est assez simple c'est sois tout en latin1 (apache - php - mysql) sois tout en utf8, de nos jour c'est quand même plus recommandé de travaillé en utf8, si a un moment y'en a 1 qui st diffèrent t'aura des soucis :wink:

Petit nouveau ! | 7 Messages

01 août 2010, 21:54

Image

Voici une copie de mon écran avec les lignes orange.

ViPHP
ViPHP | 5462 Messages

01 août 2010, 22:26

tu peux changer : Interclassement pour la connexion MySQL, c'est un menu déroulant :wink:
par contre au niveau de ton php faut etre que en iso-8859-1

Petit nouveau ! | 7 Messages

02 août 2010, 10:17

J'ai changé le charset de la page php pour charset=iso-8859-1. Mais du coup l'affichage des accents ne se fait plus bien et je n'obtient de résultat de recherche ni pour géant, ni pour geant, mais seulement pour géants.