IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes MySQL Discussion :

caractères \ à la place de '


Sujet :

Requêtes MySQL

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4
    Points : 1
    Points
    1
    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

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    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 : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « 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 !

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    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.

  4. #4
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    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 : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « 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 !

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 !

  6. #6
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    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 : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Il te manque un antislash dans ce qu'il faut remplacer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « 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 !

  7. #7
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 !

  8. #8
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    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 : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Ç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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « 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 !

Discussions similaires

  1. Affichage de caractères à la place d'image.
    Par JeanJean75 dans le forum Langage
    Réponses: 2
    Dernier message: 14/02/2010, 10h53
  2. [GD2] affiche des caractères à la place de l'image
    Par caroen dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 07/11/2008, 11h48
  3. Caractère bizarre lors de l'envoi de mail depuis un site : é à la place de é
    Par Dsphinx dans le forum Balisage (X)HTML et validation W3C
    Réponses: 9
    Dernier message: 16/04/2007, 13h41
  4. Problème caractère "?" à la place des "é"
    Par breton75 dans le forum Delphi
    Réponses: 2
    Dernier message: 01/02/2007, 16h43
  5. Affichage caractère "?" à la place des caractères
    Par ulysse49 dans le forum Débuter
    Réponses: 2
    Dernier message: 16/12/2005, 18h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo