web-dev-qa-db-fra.com

Problème d'encodage des caractères dans la base de données mysql lors de l'utilisation d'un MacBook (OSX 10.10)

J'essaie de faire fonctionner mon environnement de développement Web sur mon MacBook (OSX 10.10 avec MAMP), mais je suis bloqué par un problème d'encodage de caractères ennuyeux. Lors du développement initial de mon site dans un environnement Windows, j'ai opté pour le codage ISO-8859-1 et je n’ai jamais eu de problèmes avec le codage de caractères.

Désormais, lorsque je gère mon site localement sur mon MacBook, ces caractères sont extraits d'un texte extrait de la base de données. J'ai tenté de résoudre le problème en remplaçant la base de données ISO-8859-1 par la classification UTF-8: j'ai créé une nouvelle base de données avec la classification UTF8_unicode_ci, importé les tables de l'ancienne base de données et modifié la classification des tables et des champs en Unicode.

Voyant que cela n’a pas aidé, j’ai tenté de renommer une petite table et de la recréer à partir de rien directement en UTF8 - mais en vain.

Je ne sais pas où chercher ou quoi faire. Est-ce que quelqu'un peut me diriger dans la bonne direction?

Existe-t-il des paramètres dans php ou mysql qui sont pertinents à cet égard et qui auraient des paramètres par défaut différents sur un Mac (je ne me suis jamais amusé avec ce type de paramètres sur les deux plates-formes).

1
Argoron

Malheureusement, bien coder les caractères signifie vérifier plusieurs endroits. Les données peuvent être corrompues dans une demi-douzaine de lieux. Vous devez vérifier et vérifier chacune d’elles.

  1. Comment avez-vous importé les données de votre machine Windows? Avez-vous utilisé mysqldump? Avez-vous copié les tables de la base de données? Si vous avez utilisé mysqldump, vous devez utiliser le --default-character-set=ISO-8859-1option . De même, lors de l'importation de la base de données sur le Mac, vous devrez peut-être spécifier le jeu de caractères sur la ligne de commande.
  2. Lorsque vous utilisez PHP, vous devez indiquez-lui le jeu de caractères à utiliser lors de la connexion à la base de données. .
  3. Lors de la sortie de la page Web, vous devez spécifier le jeu de caractères dans le type de conten .

Si, dans tous ces endroits, vous utilisez ISO-8859-1, vous ne devriez plus avoir de données corrompues.

Le plus gros problème avec Latin 1 en tant que jeu de caractères que vous avez choisi est qu'il ne peut pas représenter toutes les langues. Il ne peut traiter que des langues d'Europe occidentale telles que l'anglais, l'espagnol et l'allemand. Vous voudrez peut-être convertir en UTF-8 à un moment donné, ce qui représente un jeu de caractères beaucoup plus grand et peut prendre en charge à peu près toutes les langues de la planète. La conversion n’est pas aussi simple que de spécifier ISO-8859-1 partout.

1
Stephen Ostermiller