Bonjour,


Je suis en train de bosser sur un projet utilisant une BDD pré-existante qui m'a fait plus d'une surprise côté encoding. Après y avoir regardé de plus près, il s'est avéré que des encodings différents se côtoyaient pour la base, la table, les pages web, bref ... Un sacré bordel.


J'ai harmonisé tout ça en UTF-8 (utf8_unicode_ci plus précisément pour la partie MySQL). Je pensais le problème réglé jusqu'à ce que je me rende compte que certaines entrées de la table utilisent des entités HTML (type é) alors que d'autres ont directement les caractères spéciaux en "clair".

La table faisant autour de 1500 lignes, ma question simple : quelle est la méthode la plus adéquate pour harmoniser cette table ?


Merci d'avance pour vos réponses et gloire aux Kiwis.
Modifié par MonsieurNebo (14 Jun 2013 - 14:03)
Si c'est du MySQL, je pense que tu ne vas pas avoir le choix. Il va falloir faire un script php qui lit les lignes et qui les met à jour une à une...

Certaines bases de données plus évoluées que MySQL ont des fonctions SQL prédéfinies pour faire ce genre de conversion sans passer par un autre langage comme php. Si ce genre de fonction est à ta disposition, c'est ce qu'il faut utiliser de préférence. Mais sauf erreur, en MySQL ça n'existe pas.

Voir la fonction html_entity_decode pour une conversion en php.

A noter qu'il sera peut-être plus rapide de faire lock table + truncate + un gros insert multiple + unlock table, plutôt qu'une série d'updates, si la table est assez grande.
Hello,

Entre temps j'ai résolu le problème avec un REPLACE pour chaque types de caractères spéciaux, ça représente une 15aine de requêtes SQL donc plutôt rentable.

UPDATE table
SET champ = REPLACE(champ, 'entité HTML', 'caractère correspondant')
WHERE champ LIKE '%entité HTML%'


Merci tout de même pour ta réponse Smiley cligne