Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Ersetzen von doppelten Anführungszeichen mit Escapezeichen durch doppelte Anführungszeichen in R

Ich sehe zwei Probleme mit dem, was Sie in Ihre Frage aufgenommen haben. Das erste sieht aus wie ein Tippfehler. Nachher:

html <- "<div style='text-align: center; font-family: Arial;'><span style='font-size: 14pt;'>Some text without any tricky symbols.</span></div>"   

Sie haben:

query <- c('INSERT INTO table (htmlfield) VALUES (\"', html, '"')
                                                  ^^^^^^^^^^^^^^^

Beachten Sie, dass Sie eine Zeichenfolge maskieren, die andere jedoch nicht. Du musst ihnen nicht entkommen, aber es spielt keine Rolle, ob du es tust. Du meintest auch '")' für die letzte Zeichenfolge, die, wie ich vermute, die eigentliche Fehlerquelle ist, die Sie erhalten. paste statt c ist hier sinnvoller. Wenn ich diese kombiniere, erhalten wir:

query <- paste('INSERT INTO table (htmlfield) VALUES ("', html, '")', sep = "")

die wir direkt verwenden können:

dbSendQuery(con, query)

Das zweite Problem, das viele Menschen haben, besteht darin, die gedruckte Darstellung eines Objekts mit dem Objekt selbst zu verwechseln. Wenn wir query drucken , sehen wir Folgendes:

> query
[1] "INSERT INTO table (htmlfield) VALUES (\"<div style='text-align: center; font-family: Arial;'><span style='font-size: 14pt;'>Some text without any tricky symbols.</span></div>\")"

Die gedruckte Darstellung des Strings ist immer in "" eingeschlossen doppelte Anführungszeichen und damit der interne " entkommen müssen. Was Sie sich ansehen möchten, ist die tatsächliche Zeichenfolge. Das können wir mit cat machen oder writeLines - Ich bevorzuge letzteres, da es den "\n" hinzufügt automatisch an das Ende des Strings:

> writeLines(query)
INSERT INTO table (htmlfield) VALUES ("<div style='text-align: center; font-family: Arial;'><span style='font-size: 14pt;'>Some text without any tricky symbols.</span></div>")

Beachten Sie, wie der " sind jetzt nicht entkam. Das ist das SQL, das vom Datenbankserver ausgeführt würde. Wenn das gültiges SQL für Ihre Datenbank ist, dann wird es funktionieren.