La conversion de l'iso-8859-1 à UTF-8 en UTF-8 et Latin1 tables

Résumé Du Problème:

Tout en essayant de convertir un site avec base de données mysql à partir de latin1 pour utf8, certains caractères spéciaux ne s'affichent pas correctement en dépit de garantir les jeux de caractères sont tous utf8 à l'échelle du système.

Les Détails Du Problème:

C'est un problème commun. Mais il me semble avoir une complexité supplémentaire.

Il y a des années, un inconscient développeur (moi), mettre un site avec MySQL. Certains tableaux ont été configurés avec latin1_swedish_ci et utf8_general_ci. Toutes les entrées/affichage a été fait via les pages avec de l'iso-8859-1 jeu de caractères.

Maintenant, j'ai la tâche de transformer toutes ces données en utf-8 et donc finalement uniformisants de l'encodage. Cependant, je vais avoir des problèmes avec un certain nombre de caractères spéciaux dans les deux cas (c'est à dire: ü). Les personnages ne semblent pas s'afficher correctement sur un UTF-8 à la page. Ils affichent comme �.Au lieu de cela Lors de la visualisation de données en utf8 table dans mysql query browser, un entré correctement utf8 d 'u' affiche que certains caractères spéciaux, tandis que d'une manière incorrecte latin1 'u' affiche tel qu'il doit apparaître sur la page. Mais il ne le fait pas.

J'ai essayé un certain nombre de choses:

  1. Percona script: https://github.com/rlowe/mysql_convert_charset
  2. conversion col en binaire, puis en utf8
  3. conversion utf8 tables de latin et puis répétez la procédure ci-dessus

Rien ne semble guérir les données.

Dumping, l'ensemble de la base de données et l'important n'est pas vraiment une option viable en tant que c'est une énorme base de données et les temps d'arrêt est limité.

Mise à JOUR (22-Oct-2013)

J'ai pris @deceze suggestions et revu tous mes encodage du contenu des domaines aussi par http://kunststube.net/frontback/. J'ai trouvé quelques endroits dans lesquels je suis toujours en passant/le codage des données en latin1. Bon, maintenant j'ai changé tous les coins de l'UTF-8. Cependant, les données sont toujours affichés de manière incorrecte dans un domaine particulier. Dans un tableau qui est en utf8 (sans colonnes ont implicite de l'encodage), champ1 est en latin1. Je peux vous le confirmer en exécutant la commande suivante qui affiche le texte correctement:

sélectionnez convertir(cast(convert(champ1 à l'aide de latin1) comme binaire) à l'aide de
utf8) à partir de ma table where id = 1

Cela vous permettra de transformer Hahnemühle à Hahnemühle.

Dans champ2, il semble que les données sont dans un autre (inconnu) de codage. La requête ci-dessus, lorsqu'il est utilisé sur champ2 convertit Hahnem�hle à Hahnem�hle. Je suis passé par tous les jeux de caractères sur http://dev.mysql.com/doc/refman/5.5/en/charset-charsets.html remplacement latin1 mais aucun ne semble à cracher les données correctement.

Quels sont exactement ces "problèmes" que vous avez? Sont ces caractères stockés correctement dans leurs colonnes respectives? Ce qu'ils regardent comme ils le devraient, lors de la visualisation dans un décent interface d'administration, ou sont-ils tronqués déjà? Sauf si vous essayez de stocker non-Latin1 caractères Latin1 colonne, il n'a pas vraiment d'importance ce que la définition de ces colonnes ont été dans la mesure. Un latin1 colonne simplement ne peut pas stocker plus de 256 caractères définis par le Latin-1, sauf qu'elle n'a pas d'importance dans l'utilisation quotidienne. Si vous avez inséré des données à l'aide de la connexion correcte de l'encodage, il devrait y avoir aucun problème.
J'ai ajouté le problème (désolé). Les caractères ne sont pas affichés correctement sur un utf-8 à la page. Au lieu de cela, je reçois un diamant de point d'interrogation dans Google Chrome. Lors de la visualisation de données en utf8 table dans mysql query browser, un entré correctement utf8 d 'u' affiche que certains caractères spéciaux, tandis que d'une manière incorrecte latin1 'u' affiche tel qu'il doit apparaître sur la page. Mais il ne le fait pas.
Avez-vous mis à jour la connexion codage des données provenant de la base de données est en fait codé en UTF-8? Ou êtes-vous encore de la récupération des données en Latin-1?
il a été fixé comme latin1_swedish_ci et je l'ai changé pour utf8_general_ci, comme recommandé dans le Percona script.
Non, pas le le classement de colonne, le connexion d'encodage. Merci de lire Gestion de l'Unicode Avant en Arrière Dans Une Application Web pour un aperçu de la notion.

OriginalL'auteur David | 2013-10-21