Bonjour,
Je souhaite effectuer une requête sensible à la casse.
La table est comme ceci :
Le début de mon flux HTML est :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 CREATE TABLE `users` (`US_ID` smallint(8) NOT NULL auto_increment,`US_Nom` varchar(50) collate utf8_unicode_ci NOT NULL default '', ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci PACK_KEYS=0 AUTO_INCREMENT=317 ;
J'ai une fonction "requete()" pour accéder à la base ; je la donne puisqu'il y a dedans "SET NAMES UTF8" qui peut influencer ma problématique :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 <!DOCTYPE html> <html lang="fr"> <head> <meta charset="utf-8" /> <title>xxx</title> </head> <body>
Enfin, je fais le test suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 function requete($query) { $nom_base = 'bobi'; $identifiant_base = 'root'; $mdp_base = ''; $nom_du_serveur = 'localhost'; $connect = mysql_connect($nom_du_serveur, $identifiant_base, $mdp_base); mysql_select_db($nom_base); mysql_query("SET NAMES UTF8"); $result = mysql_query($query) or die("Erreur mysql n°".mysql_errno()." :".mysql_error()); mysql_close($connect); return $result; }
Sachant qu'en base j'ai "pRof7", le test donne COUNT = 0 pour $a et COUNT = 1 pour $b.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 $a = 'prof7'; $b = 'pRof7'; $req = mysql_fetch_array(requete("SELECT US_ID FROM users WHERE US_Nom='$a' COLLATE UTF8_BIN")); echo 'COUNT = '.count($req['US_ID']).'<br />'; echo 'ID = '.$req['US_ID'];
Donc ça marche, mais j'ai bricolé un peu "à l'aveugle" le COLLATE UTF8_BIN.
En conséquence, je me demande si, malgré tout, ma syntaxe est correcte et, dans la négative, ce qu'il y aurait d'autre.
Par avance merci pour votre expertise.
Partager