Précédent   Forum du club des développeurs et IT Pro > Bases de données > MySQL > Requêtes
Requêtes Forum d'entraide sur les requêtes MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 05/12/2012, 20h02   #1
sygma
Invité de passage
 
Inscription : décembre 2012
Messages : 4
Détails du profil
Informations forums :
Inscription : décembre 2012
Messages : 4
Points : 0
Points : 0
Par défaut caractères \ à la place de '

Bonjour à tous,

n'étant pas une lumière en informatique mais un simple internaute qui essaye de partager ce qu'il sait dans un domaine particulier, je suis confronté à un souci de taille.

Je suis parvenu à migrer (apparemment c'est comme cela que ça s'appelle?), un forum Kunena vers SMF (non sans mal). Après avoir fait quelques modifs, tout semble OK sauf un paramètre essentiel que je n'arrive pas à corriger.

Tous les caractères apostrophe ('), ont été remplacés par \\\. J'ai essayé de "bidouiller" (quand on y connait rien et que ça n'est pas son métier je pense que ça ne peut pas s'appeler autrement lol, je suis toujours au point mort.

En cherchant, on m'a dit de changer l'encodage de la base de données (elle est en utf8_swedish_ci).

Comment pourrais-je faire pour que les \\\ soient tous remplacés par le caractère apostrophe (') dans les différentes catégories mais aussi les posts du forum, sans que je me tappe les près de 10000 messages à la main ??

Je m'en remets à des pros car je crois bien avoir atteint mes limites et être arrivé au bout du bout.

Encore merci à vous et bonne soirée.

Cordialement
sygma est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/12/2012, 21h37   #2
CinePhil
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 13 659
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 49
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 13 659
Points : 25 561
Points : 25 561
Envoyer un message via MSN à CinePhil
Donne la structure de la table dans laquelle tu vois ce phénomène et dis dans quelle colonne avec un exemple de données.

D'une manière générale, il va falloir que tu fasses une requête UPDATE en utilisant REPLACE :
Code :
1
2
UPDATE la_table
SET la_colonne = REPLACE(la_colonne, '\\\\\\', '\'')
Fais quand même une sauvegarde de la table avant car il peut y avoir des effets indésirables selon ce que contient la colonne.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Autoentrepreneur.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise la suite Linux Mageïa !
CinePhil est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/12/2012, 22h17   #3
sygma
Invité de passage
 
Inscription : décembre 2012
Messages : 4
Détails du profil
Informations forums :
Inscription : décembre 2012
Messages : 4
Points : 0
Points : 0
Bonsoir CinePhil et avant tout merci pour ton aide

Voici les informations dont tu as besoin (j’espère que je ne vais pas me planter):

Nom de la table: phpbb3_posts

Les colonnes contenant les caractères comme (\') au lieu de simplement (') ou (\\\) au lieu de (') sont:

post_subject
post_text


Encore un grand merci à toi pour le temps que tu consacres à mon problème.

Bonne soirée à toi.

Cordialement.
sygma est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/12/2012, 22h57   #4
CinePhil
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 13 659
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 49
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 13 659
Points : 25 561
Points : 25 561
Envoyer un message via MSN à CinePhil
Petit test...
J'ai inséré les valeurs suivantes dans une table de test :
1) Colonne titre : L'apostrophe précédée d'un antislash : \'
2) Colonne resume : Et trois antislashes + une apostrophe : \\\'

Dans phpMyAdmin, les valeurs s'affichent correctement.

Code :
1
2
SELECT REPLACE(titre, '\\', '') 
FROM la_table
Résultat : L'apostrophe précédée d'un antislash : '
=> L'antislash a été supprimé.

Même requête sur la colonne resume...
Résultat : Et trois antislashes + une apostrophe : '
=> Toutes les antislashes ont disparu.

Mais dans un message phpBB, tu peux avoir des balises fermantes de ce style : [\balisefermante] et là il ne faut pas supprimer l'antislash !

Donc je te conseillerais cette requête :
Code :
1
2
3
UPDATE phpbb3_posts
SET post_subject = REPLACE(post_subject, '\\\'', '\''),
	post_text = REPLACE(post_text, '\\\'', '\'')
L'antislash est un caractère d'échappement. Dans le code ci-dessus, le premier et le troisième antislashes sont là pour échapper le caractère qui suit : un antislah puis une apostrophe.

Encore une fois, sauvegarde avant d'exécuter !

Tu peux aussi faire un SELECT avant pour vérifier ce qui va être effectué comme opération.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Autoentrepreneur.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise la suite Linux Mageïa !
CinePhil est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/12/2012, 20h14   #5
sygma
Invité de passage
 
Inscription : décembre 2012
Messages : 4
Détails du profil
Informations forums :
Inscription : décembre 2012
Messages : 4
Points : 0
Points : 0
Bonsoir Cinephil,

Désolé de te répondre aussi tard (j'ai dû me consacrer à d'autres activités moins passionnantes et ça m'a mis en retard sur mon problème avec MySql). En testant tes bons conseils, ça m'a beaucoup aidé et j'ai pu constater que ta solution marchait parfaitement bien. Par contre j'aurais encore une dernière question à te poser:

Lorsque j'exécute la requete suivante:

Code :
1
2
UPDATE smf_messages
SET body = REPLACE(body, '\\\'', '\'')
La requete s'effectue parfaitement bien mais j'ai par exemple encore des intitulés restant avec non pas cette fois-ci \\\' (trois anti-slashs avec une apostrophe) mais \\' (2 anti-slashs avec une apostrophe). Quand j'exécute la requete suivante:

Code :
1
2
UPDATE smf_categories
SET name = REPLACE(name, '\\\\'', '\'')
(ici j'essaye de remplacer \\' par '), j'ai le message d'erreur suivant:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '\'')' at line 2


Aurais-tu une idée concernant ce problème (j'ai cherché de mon coté mais sans succès malheureusement). Encore merci pour tou et je te souhaite de bonnes fêtes de fin d'année !
sygma est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/12/2012, 21h01   #6
CinePhil
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 13 659
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 49
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 13 659
Points : 25 561
Points : 25 561
Envoyer un message via MSN à CinePhil
Il te manque un antislash dans ce qu'il faut remplacer :
Code :
1
2
UPDATE smf_categories
SET name = REPLACE(name, '\\\\\'', '\'')
1er antislash échappe un antislash.
3ème antislash échappe le second antislash.
5ème antislash échappe l'apostrophe.
Le tout est remplacé par une apostrophe.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Autoentrepreneur.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise la suite Linux Mageïa !
CinePhil est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/12/2012, 16h08   #7
sygma
Invité de passage
 
Inscription : décembre 2012
Messages : 4
Détails du profil
Informations forums :
Inscription : décembre 2012
Messages : 4
Points : 0
Points : 0
Hello Cinephil,

merci à toi pour totues ces explications elles m'ont permise de résoudre ce problème d'anti-slash qui me pourrissaient la vie (et en plus j'ai appris plein de choses grace à toi) !!

Par contre j'aurais une dernière question à te poser:

je suis passé à la seconde étape de ma migration et j'ai un problème qui ressemble trait pour trait à celui que je viens de rencontrer. Mes caractères accentués ont été remplacés par des caractères du style é ou autre. J'ai bien entendu utiliser les commandes que tu m'avais apprise avec par exemple la commande suivante (pour changer les é en é -e accent aigu).

Code :
1
2
UPDATE phpbb_posts
SET post_subject = REPLACE(post_subject, '\\é\\', '\é')
La commande fonctionne parfaitement, mais un message me dit qu'aucune ligne n'a été affectée alors qu'il y a bien dans ma colonne "post-subject" des caractères à remplacer.

Aurais-tu une idée d'ou cela pourrait venir (ou encore peut-être une façon globale de traiter mon souci) ?

Encore merci pour toute ton aide et bonne année avec un peu d'avance !
sygma est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/12/2012, 17h38   #8
CinePhil
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 13 659
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 49
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 13 659
Points : 25 561
Points : 25 561
Envoyer un message via MSN à CinePhil
Ça c'est un problème de collation de caractères.

Si tu es sur de la correspondance de chaque signe, tu peux procéder en masse comme précédemment mais cette fois tu n'as pas besoin des antislashes.

Code :
1
2
UPDATE phpbb_posts
SET post_subject = REPLACE(post_subject, 'é', 'é')
Vérifie quand même en faisant un SELECT en mode console que ce n'est pas juste un problème d'affichage.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Autoentrepreneur.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise la suite Linux Mageïa !
CinePhil est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 15h17.


 
 
 
 
Partenaires

Hébergement Web