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 sauvegardés comme ils devraient l'être dans la base de données.
par exemple, un "é" est sauvegardé en tant que "é".
j'ai essayé de définir mes fichiers à "Unicode (utf-8)", les champs de la base de données sont "utf8_general_ci" ainsi que la base de données elle-même.
quand je regarde mes données postées par AJAX avec Firebug, je vois l'accent passé comme "é", donc c'est correct.
Merci et faites-moi savoir que vous avez besoin plus d'infos!
8 réponses
Personnellement j'ai résolu le même problème en ajoutant après le MySQL code de connexion:
mysql_set_charset("utf8");
ou pour mysqli:
mysqli_set_charset($conn, "utf8");
ou mysqli OOP équivalent:
$conn->set_charset("utf8");
et parfois vous devrez définir le php principale jeu de caractères en ajoutant ce code:
mb_internal_encoding('UTF-8');
côté client HTML, vous devez ajouter les données d'en-tête suivantes:
<meta http-equiv="Content-type" content="text/html;charset=utf-8" />
afin d'utiliser les résultats JSON AJAX (par exemple en utilisant jQuery), vous devez définir l'en-tête en ajoutant :
header("Content-type: application/json;charset=utf8");
json_encode(
some_data
);
Ceci devrait faire l'affaire
Le meilleur pari est que votre connexion de base de données n'est pas encodée UTF-8 - Il est généralement ISO-8859-1 par défaut.
Essayer d'envoyer une requête
SET NAMES utf8;
après la connexion.
si vous utilisez PDO, vous devez instanciate comme ceci:
new \PDO("mysql:host=$host;dbname=$schema", $username, $password, array(\PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8') );
Avez-vous examiné http://dev.mysql.com/doc/refman/5.0/en/charset-unicode.html:
applications Client qui ont besoin de communiquer avec le serveur en utilisant Unicode doit définir le client jeu de caractères en conséquence; pour exemple, en émettant un jeu de noms 'utf8' déclaration. ucs2 ne peut pas être utilisé comme un jeu de caractères client, ce qui signifie que il ne fonctionne pas pour les noms de jeu ou JEU DE CARACTÈRES. (Voir La Section 9.1.4, "Jeux de caractères de connexion et Les classements".)
autre:
si vous obtenez des données via php à partir de votre mysql-db (tout utf-8) mais encore les obtenir?"pour certains personnages spéciaux votre navigateur (), essayez ceci:
après mysql_connect() , et mysql_select_db () ajouter cette ligne: mysql_query ("SET NAMES utf8");
a fonctionné pour moi. j'ai essayé d'abord avec l' utf8_encode, mais cela n'a fonctionné que pour äüöéè... et ainsi de suite, mais pas pour kyrillic et d'autres caractères.
utiliser UTF8:
définissez un meta 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 que vous N'ayez 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, vous l'encodage comme ceci:
header('Content-type: text/html; charset=utf-8');
Vous devez a) vous assurer que vos tables utilisent un encodage de caractères qui peut encoder de tels caractères (UTF-8 tend à être le go-to encoding ces jours-ci) et b) s'assurer que vos soumissions de formulaire sont envoyés à la base de données dans le même encodage de caractères. Vous faites cela en sauvegardant vos fichiers HTML/PHP/whatever comme UTF-8, et en incluant une balise meta dans la tête qui dit au navigateur d'utiliser L'encodage 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 que vous utilisez réellement le jeu de caractères correct en exécutant un jeu de noms charset=utf8 (peut-être pas la syntaxe correcte, je vais devoir chercher ce que devrait être, mais ce sera le long de ces lignes)
PHP (.net) conseille de ne pas configurer les charsets après la connexion en utilisant une requête comme les noms de jeu utf8 parce que votre fonctionnalité pour échapper aux données à L'intérieur des déclarations MySQL pourrait ne pas fonctionner comme prévu.
N'utilisez pas les noms de jeu utf8, mais utilisez les noms appropriés ..._set_charset() fonction (ou méthode) au lieu de cela, dans le cas où vous êtes à l'aide de PHP.