2014-03-25 24 views
5

Wenn ich ein Feld mit doppelten Anführungszeichen habe, legte mysqldump das Escape-Zeichen vor. Zum Beispiel:mysqldump, vermeiden Sie Escape doppelte Anführungszeichen

‚Mein‚test‘‘ -> mysqldump eine Datei mit diesem Feld erzeugt wie ‚My \‚test \‘‘

Das Problem ist, dass ich die Datei bin mit einem paar Daten zu importieren, in Eine SQLite-Datenbank, und SQLite entfernt das Escape-Zeichen nicht. Also brauche ich nicht, dass mysqldump Escape-Zeichen schreibt, kann ich das tun?

+0

Wenn Sie Code zur Verfügung stellen könnte, dass Sie versucht haben, das wäre hilfreich sein. – Radmation

Antwort

-1

Von einer Google-Suche fand ich this, die die Ausgabe von mysqldump so sqlite überarbeitet wird, kann es verwenden. Nicht getestet und 5 Jahre alt, aber ich denke:

  • Sie nützliche Informationen
  • finden es andere Menschen bedeuten kann, nicht eine elegantere Lösung

EDIT gefunden:

Laut den Kommentaren, um Ihre Frage zu beantworten, sieht es so aus, als ob Sie keine Wahl haben, aber ersetzen \" in ".

Here ist ein Repo mit einem script, der mysqldump Dateien in etwas übersetzt, das sqlite verdauen kann. Insbesondere für Ihre Frage, können Sie this line finden:

gsub(/\\"/, "\"") 
0

Ich bin nicht sicher, welche Sprache Sie verwenden. Aber das Konzept wäre das gleiche in jeder Programmiersprache.

Zuerst deklarieren Sie eine Variable gleich Ihrem sqldump.

var yourVariable = sqldump; 

Dann machen Sie eine string.replace ("\\", ""). Verwenden Sie dann diese 'bereinigte' Version, um Ihre Daten mit zu importieren.

0

Welchen SQL-Modus verwenden Sie? Blick auf die mysqldump Handbuch: http://dev.mysql.com/doc/refman/5.7/en/mysqldump.html

--quote-Namen, -Q

Quote Identifikatoren (wie Datenbank-, Tabellen- und Spaltennamen) innerhalb „`“Zeichen. Wenn der SQL-Modus ANSI_QUOTES aktiviert ist, werden die Bezeichner in Zeichen "" angegeben. Diese Option ist standardmäßig aktiviert. Sie kann mit --skip-quote-names deaktiviert werden, aber diese Option sollte nach einer beliebigen Option wie z wie --compatible die --quote-Namen ermöglichen kann.

--quote-names standardmäßig

ANSI_QUOTES

Treat „"“aktiviert ist. als Identifikator Anführungszeichen (wie th e "` "Zitat Zeichen) und nicht als Zeichenfolge Zitat Zeichen.Sie können weiterhin "` " verwenden, um Kennungen mit aktiviertem Modus zu zitieren. Wenn ANSI_QUOTES aktiviert ist, können Sie keine doppelten Anführungszeichen verwenden, um literale Zeichenfolgen zu zitieren, da es als ein Bezeichner interpretiert wird.

+0

Das Problem liegt in den Daten, nicht in den Tabellen- und Spaltennamen – Rahul

2

Wenn auf einem * nix (Unix, Linux, Mac) Maschine, kann ich mit sed vorschlagen \ "mit" zu ersetzen:

mysqldump [options] DB [table] | sed -e 's/\\"/"/g' 

oder für eine exsiting mydump.sql Datei:

sed -i -e 's/\\"/"/g' mydump.sql 

EDIT: für eine formale MySQL Antwort suchen, fand ich nur diese etwas im Zusammenhang offen Fehler über Apostroph Entkommen - https://bugs.mysql.com/bug.php?id=65941

Es ist auch erwähnenswert, dass es andere Tools gibt, die DBs ablegen können, ohne an Anführungszeichen mit Backslash zu kommen, wie JetBrains-Produkte (DataGrip, IntelliJ usw.).

0

Sie können Escapes in der mysqldump-Ausgabedatei konvertieren. prüfen esperlu MySQL to Sqlite converter script:

 
... 
/INSERT/ { 
    gsub(/\\\047/, "\047\047") 
    gsub(/\\n/, "\n") 
    gsub(/\\r/, "\r") 
    gsub(/\\"/, "\"") 
    gsub(/\\\\/, "\\") 
    gsub(/\\\032/, "\032") 
    print 
    next 
} 
... 
Verwandte Themen