Souci d'égalité

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Souci d'égalité

Re: Souci d'égalité

par stealth35 » 20 juil. 2010, 23:35

Sinon pour répondre à ta question initiale, avec MySQL les valeurs dans les colonnes CHAR et VARCHAR sont classées et comparées sans tenir compte de la casse (majuscule/minuscule mais également accent : e é et E sont donc identiques).
enfaite y'a une table de correspondance derrière c'est pour ca que y'a plusieurs type de charset dans mysql, parce que de l'utf-8 c'est de l'utf-8 et y'en a qu'un seul, mysql a plusieurs table de correspondance suivant les langues qui permettent de dire e = é = è = E
Pour éviter cela, il faut que l'attribut BINARY soit spécifié lors de la création de la table :)
on peu rajouter BINARY dans la requete
SELECT name FROM table WHERE truc = BINARY 'héhé'; 
et la on aura que les "héhé" et pas les "hehe", par contre en binary c'est case-sensitive

Il est clair que le plus optimisé sera le mieux ; mais pour l'instant, la question en n'est toujours pas réglée.
En effet, je viens d'essayer avec les REGEX, mais ça ne fonctionne toujours pas.

je crois avoir identifié le problème :
lorsque je fait la requête suivante :
SELECT * FROM `mf_ranking` WHERE name REGEXP 'Clémentine'
La requête qui est appliquée est celle-ci :
SELECT * FROM `mf_ranking` WHERE name REGEXP 'Clémentine'
Donc fatalement, ça foire.
Que faire pour y remédier?

Merci encore. ;)

vérifie bien le charset des connections :
character set client
character set connection
collation connection

Re: Souci d'égalité

par Ryle » 20 juil. 2010, 22:06

Sinon pour répondre à ta question initiale, avec MySQL les valeurs dans les colonnes CHAR et VARCHAR sont classées et comparées sans tenir compte de la casse (majuscule/minuscule mais également accent : e é et E sont donc identiques).

Pour éviter cela, il faut que l'attribut BINARY soit spécifié lors de la création de la table :)

Re: Souci d'égalité

par SinBert » 20 juil. 2010, 20:09

Il est clair que le plus optimisé sera le mieux ; mais pour l'instant, la question en n'est toujours pas réglée.
En effet, je viens d'essayer avec les REGEX, mais ça ne fonctionne toujours pas.

je crois avoir identifié le problème :
lorsque je fait la requête suivante :
SELECT * FROM `mf_ranking` WHERE name REGEXP 'Clémentine'
La requête qui est appliquée est celle-ci :
SELECT * FROM `mf_ranking` WHERE name REGEXP 'Clémentine'
Donc fatalement, ça foire.
Que faire pour y remédier?

Merci encore. ;)

Re: Souci d'égalité

par stealth35 » 20 juil. 2010, 16:07

Je vais laisser SinBert juger si ça résout ou non son problème. À mon avis oui. Si SinBert obtient ainsi le résultat recherché, quoi chercher de plus?
quelque chose de plus officiel et plus optimisé ?

Re: Souci d'égalité

par Patriboom » 20 juil. 2010, 16:02

Je vais laisser SinBert juger si ça résout ou non son problème. À mon avis oui. Si SinBert obtient ainsi le résultat recherché, quoi chercher de plus?

Re: Souci d'égalité

par stealth35 » 20 juil. 2010, 15:44

Non, REGEXP fonctionne très bien avec UTF8_general
oui mais ca résout pas le problème ca le contourne

Re: Souci d'égalité

par Patriboom » 20 juil. 2010, 15:32

Non, REGEXP fonctionne très bien avec UTF8_general

Re: Souci d'égalité

par stealth35 » 20 juil. 2010, 15:05

J'ai oublié de mentionner que mon test a été fait en utf8_general_ci
faudrait le passé en utf8_bin

Re: Souci d'égalité

par Patriboom » 20 juil. 2010, 14:54

J'ai oublié de mentionner que mon test a été fait en utf8_general_ci

Re: Souci d'égalité

par stealth35 » 20 juil. 2010, 14:47

en quelle charset est ta colonne ?

Re: Souci d'égalité

par Patriboom » 20 juil. 2010, 14:40

Je viens d'essayer ceci dans PhpMyAdmin et j'obtiens le résultat voulu, j'en conclus que ce peut être bon pour vous:
SELECT * 
FROM `personnes_noms` 
WHERE `Prenom` 
REGEXP 'Clémentine'

Bref: utiliser REGEXP à la place de = or de LIKE

Re: Souci d'égalité

par SinBert » 20 juil. 2010, 14:24

Bonjour,

je ne peux qu'admettre que tu as tout a fait raison. Cependant, il se trouve que la colonne "name" qui contient donc les noms ne contiendra jamais de doublons vu que ces noms sont enfaite des IGN issu d'un jeu vidéo en ligne. Il ne peut donc pas y avoir de doublons.
Pour la colonne ID, c'est se que je fais généralement, sur les autres tables. Mais encore une fois, je ne peux pas. Mon script va chercher les niveaux des joueurs sur le site officiel du jeu et ceci uniquement grâce à leur IGN. Je ne peux donc faire l'update qu'a partir de ceux ci.

Donc ma question reste la même : Comment faire pour que ma requête ne retourne pas "Clémentine" lorsque je lui demande "Clementine"?

Merci encore ;)

Re: Souci d'égalité

par Patriboom » 20 juil. 2010, 13:44

C'est toujours très délicat de fonder des UPDATE sur des noms et - je crois - encore plus de le faire sur des prénoms. Combien de gens ont le même prénom!
Pour être vraiment sûr du résultat, rien ne vaut le travail sur un ID unique auto-incrémenté.
Je crains qu'en réglant ce cas, tu ne te crées plus de nouveaux problèmes que ne règles de cas.

Souci d'égalité

par SinBert » 20 juil. 2010, 11:43

Bonjour,

lorsque je fais une requête du style :
SELECT * WHERE name="Clémentine";
Et bien mysql me retourne correctement les info de "Clémentine", mais aussi celles de "Clementine" (sans l'accent sur le "e")

C'est assez problématique car je ne peux pas updater le champ "Clémentine" sans updater l'autre champ ! (Clementine)

Auriez vous une solution pour cela?

Merci d'avance. :)