GizMecano a écrit :
Une deuxième colonne (valeurs globales), que je n'avais pas vue, a fait son apparition, et malgré plusieurs manipulations, tant avec ton aide que celle de la page indiquée, les variables restent les mêmes, voire pire, certaines sont revenues à en latin (je les souligne ci-dessous) :
C’est normal ça.
Je ne comprends rien, à ces histoires de valeurs pour la session et de valeurs globales : je saisis du texte en utf-8 et je veux qu'il sorte en utf-8, ça devrait quand même pas être compliqué
Les valeurs globales, ce sont les valeurs par défaut dans MySQL. Les valeurs de session, ce sont les valeurs actives pour la connexion considérée, donc là, ce que tu vois, ce sont les réglages pour la connexion que créé phpmyadmin. Ça n’a pas d’importance pour toi, ce qui t’interesse, ce sont les réglages de
ta connexion que tu créés dans tes scripts php. Et dans ce cas, il faut que tu exécutes la requètes SET NAMES que j’ai donnée plus haut pour bosser en utf-8 avec mysql (ou alors tu lui files à bouffer du texte en latin1 mais ça réduit grandement l’intérêt).
donc dans tes scripts, tu créés ta connexion, puis tu fais mysqli_query("SET NAMES 'utf8'");
Ensuite, mysql t’enverra de l’utf-8 (même de colonnes étant en latin1). MySQL considèrera aussi ce que tu lui envoies comme étant de l’utf-8. Pour qu’il le laisse en utf-8 et ne fasse pas de conversion vers latin1 par exemple, assure toi que les interclassements de tes colonnes sont bien sur utf8_general_ci (ou tout autre valeur en utf8_*).
Tout ce que je te dis là est le fruit de ma réflexion sur le problème, non un retour d’expérience, mais je pense que ça doit être ça.
Le mieux est que tu créés une table de test ayant utf8_general_ci comme interclassement, tu y créés deux champs,
id en auto incrément et
texte en varchar ou text (l’interclassement de la colonne
texte devrait être le même que celui de la table, si ce n’est pas le cas, met le manuellement sur utf8_general_ci ou n’importe quel autre interclassement en utf8_*)
Ensuite, un script de test:
Code : Tout sélectionner
<?php
/* le script doit être en utf-8 (pour les données de la requète insert, ou sinon, fais un utf8_encode() sur les données avant de les insérer */
$db = new mysqli('localhost', 'user', 'pass', 'dbname');
/* Vérification de la connexion */
if (mysqli_connect_errno()) {
printf("Echec de la connexion : %s\n", mysqli_connect_error());
exit;
}
$db->query("SET NAMES 'utf8'");
$db->query("INSERT INTO table_test (texte) VALUES('Ceci est un test de la gestion de l\'utf-8 par MySQL é è à ß')");
$result = $db->query("SELECT texte FROM table_test LIMIT 1");
$row = $result->fetch_array();
header('Content-Type: text/plain; charset=UTF-8');
echo $row['texte'];
exit;
?>
Le texte doit être affiché correctement (donc utf-8 valide), et quand tu regardes dans phpmyadmin, il doit être affiché correctement aussi. Si ces deux conditions sont réunies, c’est que c’est bon normalement.
Edit: Chez moi, le test est passé, je sors bien de l’utf-8 et c’est bien de l’utf-8 qui est stocké dans la table.