web-dev-qa-db-fra.com

MySQL - Remplacer un caractère dans les colonnes

En tant que novice autodidacte, je me suis créé un gros problème. Avant d'insérer des données dans ma base de données, j'avais déjà converti des apostrophes (') dans une chaîne, en guillemets doubles (""), au lieu des barres obliques inversées et des apostrophe (\') requises par MySQL.

Avant que ma table ne contienne plus de 200 000 lignes, je pensais qu'il était préférable de remédier immédiatement à ce problème. J'ai donc fait quelques recherches et trouvé la fonction SQL REPLACE, ce qui est excellent, mais je suis maintenant confus.

En ASP, je faisais ceci:

str = Replace(str,"'","""")

Si je regarde ma base de données dans SQL Workbench, le symbole que j'ai converti est maintenant un guillemet simple ("), ce qui m'a un peu confondu. Je comprends pourquoi il est passé de double à simple, mais je ne sais pas lequel. Je suis censé changer maintenant.

Pour résoudre et résoudre mon problème à l'aide de SQL REPLACE, convertis-je maintenant les guillemets simples (") en barres obliques inversées et les apostrophes (\ ') ou convertis-nous les guillemets doubles (" ") en barres obliques inverses et en apostrophes (\') ?

Par exemple, ceci:

SQL = " SELECT REPLACE(myColumn,"""","\'") FROM myTable "

ou ca:

SQL = " SELECT REPLACE(myColumn,""","\'") FROM myTable "

J'espère que je me suis bien expliqué, toutes les suggestions reçues avec gratitude, comme toujours. Toute question sur ma question, s'il vous plaît commenter.

Merci beaucoup

- UPDATE -

J'ai essayé les requêtes suivantes mais je ne parviens toujours pas à changer le (") dans les données:

SELECT REPLACE(caption,'\"','\'') FROM photos WHERE photoID = 3371
SELECT REPLACE(caption,'"','\'') FROM photos WHERE photoID = 3371
SELECT REPLACE(caption,'""','\'') FROM photos WHERE photoID = 3371

Pourtant si je cherche:

SELECT COUNT(*) FROM photos WHERE caption LIKE '%"%'

Je reçois 16,150 lignes.

- UPDATE 2 -

Eh bien, j'ai créé une "solution de contournement". J'ai réussi à convertir assez rapidement une colonne entière en écrivant un script ASP, en utilisant ce SQL:

SELECT photoID, caption FROM photos WHERE caption LIKE '%""%';

puis dans ASP je l'ai fait:

caption = Replace(caption,"""","\'")

Mais j'aimerais quand même savoir pourquoi je ne pouvais pas y arriver avec SQL?

52
TheCarver

L'exécution de l'instruction SELECT n'aura aucun effet sur les données. Vous devez utiliser une instruction UPDATE avec le REPLACE pour que le changement se produise:

UPDATE photos
   SET caption = REPLACE(caption,'"','\'')

Voici un exemple de travail: http://sqlize.com/7FjtEyeLAh

122
mellamokb

Remplacer les caractères ci-dessous

~ ! @ # $ % ^ & * ( ) _ +
` - = 
{ } |
[ ] \
: " 
; '

< > ?
, . 

avec ce SQL

SELECT note as note_original, 

    REPLACE(
        REPLACE(
            REPLACE(
                REPLACE(
                    REPLACE(
                        REPLACE(
                            REPLACE(
                                REPLACE(
                                    REPLACE(
                                        REPLACE(
                                            REPLACE(
                                                REPLACE(
                                                    REPLACE(
                                                        REPLACE(
                                                            REPLACE(
                                                                REPLACE(
                                                                    REPLACE(
                                                                        REPLACE(
                                                                            REPLACE(
                                                                                REPLACE(
                                                                                    REPLACE(
                                                                                        REPLACE(
                                                                                            REPLACE(
                                                                                                REPLACE(
                                                                                                    REPLACE(
                                                                                                        REPLACE(
                                                                    REPLACE(
                                                                        REPLACE(
                                                                            REPLACE(
                                                                                REPLACE(
                                                                                    REPLACE(
                                                                                        REPLACE(
                                                                                            REPLACE(note, '\"', ''),
                                                                                        '.', ''),
                                                                                    '?', ''),
                                                                                '`', ''),
                                                                            '<', ''),
                                                                        '=', ''),
                                                                    '{', ''),
                                                                                                        '}', ''),
                                                                                                    '[', ''),
                                                                                                ']', ''),
                                                                                            '|', ''),
                                                                                        '\'', ''),
                                                                                    ':', ''),
                                                                                ';', ''),
                                                                            '~', ''),
                                                                        '!', ''),
                                                                    '@', ''),
                                                                '#', ''),
                                                            '$', ''),
                                                        '%', ''),
                                                    '^', ''),
                                                '&', ''),
                                            '*', ''),
                                        '_', ''),
                                    '+', ''),
                                ',', ''),
                            '/', ''),
                        '(', ''),
                    ')', ''),
                '-', ''),
            '>', ''),
        ' ', '-'),
    '--', '-') as note_changed FROM invheader
12
Umar Adil

peut-être que j'irais par là.

 SQL = SELECT REPLACE(myColumn, '""', '\'') FROM myTable

J'ai utilisé singlequotes parce que c'est celui qui enregistre les expressions de chaîne dans MySQL, du moins je le crois.

J'espère que ça t'as aidé.

3
Nathan

Si vous avez "quelque chose" et que vous avez besoin de "quelque chose", utilisez replace(col, "\"", "\'") et vice-versa.

0
Esselans