Mysql
 sql >> Base de données >  >> RDS >> Mysql

Caractères spéciaux en PHP / MySQL

Je voudrais juste apporter quelques détails supplémentaires sur la solution proposée par vartec qui est (selon votre installation MySQL) la solution la plus correcte à votre problème. Tout d'abord, le problème de jeu de caractères / d'encodage dans MySQL est un sujet quelque peu complexe qui est largement couvert dans le manuel MySQL Chapitre 9.1 "Prise en charge des jeux de caractères" . Dans votre cas en particulier 9.1.4. "Jeux de caractères de connexion et classements" sera le plus pertinent.

Pour faire court:MySQL doit savoir quel jeu de caractères/encodage votre application cliente (parlant du point de vue de la base de données, c'est votre script PHP) attend car il transcodera toutes les données de chaîne du jeu de caractères/encodage interne défini au niveau du serveur-, au niveau de la base de données, de la table ou de la colonne dans le jeu de caractères/encodage de connexion. Vous utilisez UTF-8 côté client, vous devez donc indiquer à MySQL que vous utilisez UTF-8. Ceci est fait par la commande MySQL SET NAMES 'utf8' qui doit être envoyé comme première requête à l'ouverture d'une connexion. En fonction de votre installation et de la bibliothèque client MySQL que vous utilisez dans le script PHP, cela peut être fait automatiquement à chaque connexion.

Si vous utilisez PDO, il suffit de définir un paramètre de configuration

$db = new PDO($dsn, $user, $password);
$db->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND, "SET NAMES 'utf8'");

Utiliser mysqli pour changer le jeu de caractères/encodage du client est encore plus simple :

$mysqli = new mysqli("localhost", "user", "password", "db");
$mysqli->set_charset("utf8");

J'espère que cela contribuera à rendre le tout plus compréhensible.