web-dev-qa-db-fra.com

Enregistrer les accents dans la base de données MySQL


J'essaie de sauvegarder les accents français dans ma base de données, mais ils ne sont pas enregistrés comme ils le devraient dans la base de données.
Par exemple, un "é" est enregistré en tant que "Ã ©".
J'ai essayé de définir mes fichiers sur "Unicode (utf-8)", les champs de la base de données sont "utf8_general_ci" ainsi que sur la base de données elle-même.
Lorsque je regarde mes données postées via AJAX avec Firebug, je vois que l'accent est transmis sous la forme "é", il est donc correct.

Merci et laissez-moi savoir que vous avez besoin de plus d'informations!

25
Ebpo

Personnellement, j'ai résolu le même problème en ajoutant après le code de connexion MySQL:

mysql_set_charset("utf8");

ou pour mysqli:

mysqli_set_charset($conn, "utf8");

ou l'équivalent mysqli OOP:

$conn->set_charset("utf8");

Et parfois, vous devrez définir le charset main php en ajoutant ce code:

mb_internal_encoding('UTF-8');

Du côté HTML du client, vous devez ajouter les données d'en-tête suivantes:

<meta http-equiv="Content-type" content="text/html;charset=utf-8" />

Pour utiliser les résultats JSON AJAX (par exemple, à l'aide de jQuery), vous devez définir l'en-tête en ajoutant:

header("Content-type: application/json;charset=utf8");
json_encode(
     some_data
);

Cela devrait faire l'affaire

48
Olivier Kaisin

Le meilleur choix est que votre connexion à la base de données ne soit pas codée UTF-8 - il s'agit généralement de la norme ISO-8859-1 par défaut.

Essayez d'envoyer une requête

SET NAMES utf8;

après avoir établi la connexion.

6
Pekka 웃

mysqli_set_charset ($ conn, "utf8");

3
Zhanka

si vous utilisez PDO, vous devez instancier comme ça:

new \PDO("mysql:Host=$Host;dbname=$schema", $username, $password, array(\PDO::MYSQL_ATTR_INIT_COMMAND =>  'SET NAMES utf8') );
3
A.Baudouin

Utilisez UTF8:

Définir une méta dans votre 

<meta http-equiv="Content-type" content="text/html;charset=utf-8" />   

Lorsque vous vous connectez à votre base de données mySQL, forcez l’encodage pour NE PAS jouer avec vos paramètres mysql.

$conn = mysql_connect('server', 'user', 'password') or die('Could not connect to mysql server.');
mysql_select_db('mydb') or die('Could not select database.');
mysql_set_charset('utf8',$conn); //THIS IS THE IMPORTANT PART

Si vous utilisez AJAX, définissez votre codage comme suit:

header('Content-type: text/html; charset=utf-8');
1
Etienne Dupuis

Avez-vous examiné http://dev.mysql.com/doc/refman/5.0/en/charset-unicode.html

Applications client qui doivent communiquer avec le serveur à l'aide de Unicode devrait définir le client jeu de caractères en conséquence; pour Par exemple, en émettant un SET NAMES 'utf8' déclaration. ucs2 ne peut pas être utilisé en tant que jeu de caractères client, ce qui signifie que cela ne fonctionne pas pour SET NAMES ou SET JEU DE CARACTÈRES. (Voir Section 9.1.4, “Jeux de caractères de connexion et Classements”.)

En plus de cela: 

si vous obtenez des données via php de votre mysql-db (tout en utf-8) mais quand même obtenir '?' pour certains caractères spéciaux dans votre navigateur (), essayez ceci:

après mysql_connect (), et mysql_select_db () ajoute ces lignes: mysql_query ("SET NAMES utf8");

a travaillé pour moi. J'ai d'abord essayé avec le utf8_encode, mais cela n'a fonctionné que pour äüöéè ... et ainsi de suite, mais pas pour kyrillique et autres caractères.

1
Shan Plourde

PHP (.net) déconseille de définir des jeux de caractères après la connexion à l'aide d'une requête telle que SET NAMES utf8, car votre fonctionnalité permettant d'échapper des données dans les instructions MySQL pourrait ne pas fonctionner comme prévu.

N'utilisez pas SET NAMES utf8, mais utilisez plutôt la fonction (ou la méthode) ..._ set_charset () appropriée, au cas où vous utiliseriez PHP.

0
Thomas

Vous devez a) vous assurer que vos tables utilisent un codage de caractères capable de coder de tels caractères (UTF-8 est plutôt l'encodage par excellence) et b) de vous assurer que vos soumissions de formulaire sont envoyées à la base de données en le même encodage de caractères. Pour ce faire, en enregistrant vos fichiers HTML/PHP/tous types au format UTF-8, et en incluant une balise méta dans l’en-tête qui indique au navigateur d’utiliser le codage UTF-8. 

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

Oh, et n'oubliez pas C, lors de la connexion à la base de données, assurez-vous d'utiliser le bon jeu de caractères en exécutant un jeu de caractères SET NAMES = utf8 (la syntaxe n'est peut-être pas la bonne, il faudra que je recherche il devrait être, mais ce sera dans ces lignes)

0
GordonM