Malheureusement, phpMyAdmin est l'une des premières applications php à parler correctement de charset à MySQL. Votre problème est probablement dû au fait que la base de données ne stocke pas les chaînes UTF-8 correctes en premier lieu.
Afin d'afficher correctement les caractères correctement dans phpMyAdmin, les données doivent être correctement stockées dans la base de données. Cependant, convertir la base de données en jeu de caractères correct casse souvent les applications Web qui ne prennent pas en compte la fonctionnalité liée au jeu de caractères fournie par MySQL.
Puis-je demander :est-ce que MySQL> version 4.1 ? À quelle application Web la base de données est-elle destinée ? phpBB ? La base de données a-t-elle été migrée depuis une ancienne version de l'application Web ou une ancienne version de MySQL ?
Ma suggestion n'est pas de frère si l'application Web que vous utilisez est trop ancienne et non prise en charge. Ne convertissez la base de données en UTF-8 réel que si vous êtes sûr que l'application Web peut les lire correctement.
Modifier :
Votre MySQL est> 4.1, cela signifie qu'il est conscient du jeu de caractères. Quels sont les paramètres de classement du jeu de caractères pour votre base de données ? Je suis presque sûr que vous utilisez latin1
, qui est le nom MySQL pour ASCII, pour stocker le texte UTF-8 en 'octets', dans la base de données.
Pour les clients insensibles au jeu de caractères (c'est-à-dire mysql-cli et php-mod-mysql), les caractères s'affichent correctement puisqu'ils sont transférés vers/depuis la base de données sous forme d'octets. Dans phpMyAdmin, les octets sont lus et affichés sous forme de caractères ASCII, c'est le texte poubelle que vous semblez.
D'innombrables heures ont été passées il y a des années (2005 ?) lorsque MySQL 4.0 est devenu obsolète, dans de nombreuses régions d'Asie. Il existe une méthode standard pour traiter votre problème et les données englouties :
- Sauvegardez votre base de données en tant que
.sql
- Ouvrez-le dans un éditeur de texte compatible UTF-8, assurez-vous qu'il est correct.
- Recherchez
charset collation latin1_general_ci
, remplacezlatin1
enutf8
. - Enregistrer en tant que nouveau fichier sql, ne pas écraser votre sauvegarde
- Importez le nouveau fichier, il s'affichera désormais correctement dans phpMyAdmin, et le japonais sur votre application Web deviendra un point d'interrogation. C'est normal.
- Pour votre application Web PHP qui repose sur php-mod-mysql, insérez
mysql_query("SET NAMES UTF8");
aprèsmysql_connect()
, maintenant les points d'interrogation auront disparu. -
Ajoutez la configuration suivante
my.ini
pour mysql-cli :# CLIENT SECTION [mysql] default-character-set=utf8 # SERVER SECTION [mysqld] default-character-set=utf8
Pour plus d'informations sur le jeu de caractères sur MySQL, veuillez vous référer au manuel : http://dev.mysql.com/doc/refman/5.0/en/charset-server.html
Notez que je suppose que votre application Web utilise php-mod-mysql pour se connecter à la base de données (d'où le mysql_connect()
fonction), puisque php-mod-mysql est la seule extension à laquelle je peux penser qui déclenche toujours le problème À CE JOUR.
phpMyAdmin utilise php-mod-mysqli pour se connecter à MySQL. Je n'ai jamais appris à l'utiliser car je suis passé aux frameworks* pour développer mes projets php. Je vous encourage fortement à le faire aussi.
- De nombreux frameworks, par ex. CodeIgniter, Zend, utilisez mysqli ou pdo pour vous connecter aux bases de données. Les fonctions mod-mysql sont considérées comme obsolètes en raison d'un problème de performances et d'évolutivité. De plus, vous ne souhaitez pas lier votre projet à un type de base de données spécifique.