2009-01-16 7 views
0

J'ai une table de données codées en latin5 charset et toutes les colonnes de la table sont également latin5. De la console mysql quand j'entre "SET NAMES 'latin5'" et interrogez les résultats de la table sont ok. Lorsque j'essaie de supprimer ou d'insérer/mettre à jour tous les encodages des nouvelles données sont parfaits. Mais quand j'essaie d'insérer des données Iso-8859 (aussi vérifier avec mb_detect_encoding) à la base de données et j'essaie d'insérer les données sans "SET NAMES" il n'insère/met pas à jour/sélectionne les encodages appropriés ou quand j'utilise "SET NAMES 'latin5' "il n'introduit/ne met pas à jour de manière correcte mais sélectionne les données latin5 correctes qui arrivent avec les encodages appropriés avec seulement les noms 'latin5'. Quand j'utilise les noms de set 'utf8', les requêtes select sont mal codées mais insert/update sont correctes.Problème d'encodage étrange

La raison pour laquelle j'ai demandé que nous allions à la production. Et cela me fait penser à d'éventuels problèmes futurs.

Répondre

2

mb_detect_encoding ne sait pas quel est le codage de votre chaîne. Il fait une estimation qualifiée, mais il n'y a aucune garantie qu'il devinera juste. Surtout pas si les candidats sont tous des codages mono-octets, comme dans le cas de latin1 et latin5.

Il n'y a vraiment pas de substitut pour savoir ce que vous faites, si vous voulez avoir des jeux de caractères corrects. Je vous suggère de lire ces pages au moins deux ou trois fois:

En particulier, notez qu'une page Web est utilisée avec un en-tête HTTP, qui spécifie les charset que la page est encodée avec. À moins que vous ne définissiez explicitement cela à partir de votre script php, vous utiliserez la valeur par défaut des serveurs Web, qui peut varier d'un serveur à l'autre. De plus, méfiez-vous de comprendre réellement ce qui se passe, plutôt que de faire des essais et des erreurs. Ce dernier peut facilement vous obtenir quelque chose qui fonctionne dans un certain contexte, mais pas dans tous les contextes.

Et enfin. Si vous avez le choix, je vous suggère sérieusement d'utiliser utf-8 pour tout. latin5 va vous causer beaucoup de chagrin.