En rapport avec ce sujet, je cherche à pouvoir faire un select exclusif avec accents.
Je m'explique :
J'ai une colonne "titre" dans la table playlist de ma db, j'ai admettons dedans :
pepe
pépé
Si je fais dans phpmyadmin
Code : Tout sélectionner
SELECT titre FROM playlist WHERE titre LIKE '%é%' Si je rajoute collate utf8_bin pour faire
Code : Tout sélectionner
SELECT titre FROM playlist WHERE titre LIKE '%é%' collate utf8_binEn revanche, si j'applique la même méthode dans le script d'autocomplete , tout en désactivant le if isset get term pour pouvoir exécuter la page directement :
Code : Tout sélectionner
// if (isset($_GET['term'])){
// $wideterm = '%'.utf8_decode($_GET['term']).'%';
$wideterm = '%é%';
$return_arr = array();
try {
$conn = new PDO("mysql:host=".DB_SERVER.";dbname=".DB_NAME, DB_USER, DB_PASSWORD);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $conn->prepare('SELECT titre,datepl FROM playlist WHERE (titre LIKE :term collate utf8_bin ) GROUP BY titre ORDER BY titre ASC, datepl DESC');
$stmt->execute(array('term' => $wideterm ));
while($row = $stmt->fetch()) {
$bonus = '';
$bonus0 = '0';
$bonus1 = '0';
$bonustext = '';
$titre = addslashes($row['titre']);
$stmt2 = $conn->prepare('SELECT bonus FROM playlist WHERE (titre LIKE :term2 ) ');
$stmt2->execute(array('term2' => $titre));
while($row2 = $stmt2->fetch()) {
$bonus = $row2['bonus'] ;
if ( $bonus == '0' ) { $bonus0++; }
if ( $bonus == '1' ) { $bonus1++; }
}
if ( $bonus0 == 0 && $bonus1 == 0 ) { $bonustext = ''; }
if ( $bonus0 != 0 && $bonus1 == 0 ) { $bonustext = ''; }
if ( $bonus0 == 0 && $bonus1 != 0 ) { $bonustext = ' (Bonus)'; }
if ( $bonus0 != 0 && $bonus1 != 0 ) { $bonustext = ''; }
// $return_arr[] = $row['titre'] . " (" . $row['datepl'] . ")" . $bonustext . "<br>";
$return_arr[] = utf8_encode($row['titre']) . " (" . $row['datepl'] . ")". $bonustext ;
}
} catch(PDOException $e) {
echo 'ERROR: ' . $e->getMessage();
}
/* Toss back results as json encoded array. */
echo json_encode($return_arr);
// }
ERROR: SQLSTATE[42000]: Syntax error or access violation: 1253 COLLATION 'utf8_bin' is not valid for CHARACTER SET 'latin1'[]
Mon fichier php est encodé en "UT8 (sans BOM)" , la colonne titre, est en titre utf8_general_ci , la table playlist est latin1_swedish_ci (mais si je change pour ut8_bin ou ut8_general_ci, c'ets pas mieux, toujours meme erreur), la base est en utf8_bin .
Sachant que je n'ai jamais rien compris à ces encodages (les caractères accentués s'affichent en losanges noir si je change, etc etc, dans la configuration actuelle, les pages php doivent être écrites comme ca écrites pour que ca s'affiche bien).
Je ne sais pas du tout où chercher , donc si quelqu'un a une astuce , je suis preneur
Merci
Couin