Hinzufügen eines Zeilenumbruchs in MySQL INSERT INTO-Text

78

Könnte mir jemand sagen, wie ich eine neue Zeile in einen Text einfügen soll, den ich in eine MySql-Tabelle eingebe?

Ich habe versucht, das '\n'in der Zeile zu verwenden, die ich mit INSERT INTOAnweisung eingegeben habe , aber es '\n'wird so angezeigt, wie es ist.

Eigentlich habe ich in MS Access eine Tabelle mit einigen Daten erstellt. MS Access fügt eine neue Zeile mit hinzu '\n'. Ich konvertiere MS Access-Tabellendaten in MySql. Beim Konvertieren wird das '\n'jedoch ignoriert und der gesamte Text wird in einer einzigen Zeile angezeigt, wenn ich ihn aus der MySql-Tabelle in einem PHP-Formular anzeige.

Kann mir jemand sagen, wie MySQL eine neue Zeile in einen Text einfügen kann? Warten auf Antwort, danke !!

Muhammed Umer
quelle
Hier finden Sie die Antwort stackoverflow.com/a/41448185/5466401
Sibin John Mattappallil

Antworten:

74

Wenn Sie mit einem SQL-Befehl einverstanden sind , der sich über mehrere Zeilen erstreckt, ist der Vorschlag von oedo der einfachste:

INSERT INTO mytable (myfield) VALUES ('hi this is some text
and this is a linefeed.
and another');

Ich hatte gerade eine Situation, in der es vorzuziehen war, die SQL-Anweisung in einer Zeile zu haben, also fand ich, dass eine Kombination aus CONCAT_WS()und CHAR()für mich funktioniert.

INSERT INTO mytable (myfield) VALUES (CONCAT_WS(CHAR(10 using utf8), 'hi this is some text', 'and this is a linefeed.', 'and another'));
Don Kirkby
quelle
Ist eine Kombination aus CARRIAGE RETURNund LINE FEEDdurch Verwendung nicht CHAR(13)und CHAR(10)normalerweise aus Kompatibilitätsgründen empfohlen? CRist äquivalent zu \rund LFist äquivalent zu\n
Fr0zenFyr
33

In einer tatsächlichen SQL-Abfrage fügen Sie einfach eine neue Zeile hinzu

INSERT INTO table (text) VALUES ('hi this is some text
and this is a linefeed.
and another');
chris
quelle
24

Für die Aufzeichnung wollte ich einige Zeilenumbrüche in vorhandene Daten einfügen und ich musste \nin Ordnung arbeiten ...

Beispieldaten:

Sentence. Sentence. Sentence

Ich tat:

UPDATE table SET field = REPLACE(field, '. ', '.\r\n')

Es funktionierte aber auch mit gerecht \rund gerecht \n.

Matt
quelle
4
Funktioniert leider nicht, wenn Ihr Text Abkürzungen wie "Mr. Smith" enthält, die in zwei Zeilen unterteilt werden.
bläulich
1
danke, das war hilfreich für meine Situation, in der ich
parse
Beachten Sie, dass Sie im Allgemeinen nur \ n in einer UNIX-Serverumgebung und \ r \ n in einer Nur-Windows-Serverumgebung verwenden möchten. Verwenden Sie \ r nicht alleine. Hier ist eine Diskussion darüber, was diese bedeuten, außer dass Informationen über "Mac" mit "\ r" absolut veraltet sind - Macs verwenden seit etwa 15 Jahren ausschließlich das Standard-Unix "LF" (\ n). -> stackoverflow.com/questions/1552749/…
XP84
1
@ XP84 Guter Punkt! Ich würde noch weiter gehen und die Haltung einnehmen, dass der Text in der DB plattformunabhängig sein und daher \nnur verwendet werden sollte. So gehen die meisten dieser Systeme damit um. ZB Git. Optional können Sie ersetzen \nmit \r\nauf einem Windows - System beim Lesen, aber meistens werden Sie es nicht einmal erforderlich finden. Die meisten Windows-Komponenten funktionieren nur mit \n. Notepad ist eine bemerkenswerte Ausnahme.
Stijn de Witt
Wunderbar! Ich hatte eine Datenbank konvertiert und die Zeichen '\ n' und '\ r' wurden versehentlich eingefügt. Ich habe mich in nur zwei Aussagen UPDATE table SET field = REPLACE(field, '\\r', '\r');UPDATE table SET field = REPLACE(field, '\\n', '\n');
darum gekümmert
15
INSERT INTO test VALUES('a line\nanother line');

\n funktioniert hier einfach gut

xtds
quelle
@ JordanSilva und die Befürworter seines Kommentars: Schauen Sie sich die Antwort von David M an , die wahrscheinlich Ihre Lösung enthält.
Stijn de Witt
@StijndeWitt Es ist lange her und ich kann mich nicht erinnern, wie ich das Problem gelöst habe. Aber danke für den Tipp.
Jordan Silva
12

MySQL kann in den meisten Fällen Zeilenumbrüche problemlos aufzeichnen. Das Problem ist jedoch, dass Sie <br />Tags in der tatsächlichen Zeichenfolge benötigen, damit Ihr Browser die Unterbrechungen anzeigt. Da Sie PHP erwähnt haben, können Sie mit dieser nl2br()Funktion ein Zeilenumbruchzeichen (" \n") in HTML konvertieren<br /> Tag .

Verwenden Sie es einfach so:

<?php
echo nl2br("Hello, World!\n I hate you so much");
?>

Ausgabe ( in HTML ):

Hello, World!<br>I hate you so much

Hier ist ein Link zum Handbuch: http://php.net/manual/en/function.nl2br.php

starleaf1
quelle
2
Hinweis: Der Standardstil <br>ist tatsächlich<br />
Brian Leishman
7
INSERT INTO myTable VALUES("First line\r\nSecond line\r\nThird line");
Nancy Alajarmeh
quelle
4

Wenn Sie möchten, dass es in einem PHP-Formular angezeigt wird, ist das Medium zunächst HTML, sodass eine neue Zeile mit dem <br />Tag gerendert wird . Überprüfen Sie den Quell-HTML-Code der Seite. Möglicherweise wird die neue Zeile nur als Zeilenumbruch gerendert. In diesem Fall besteht Ihr Problem lediglich darin, den Text für die Ausgabe in einen Webbrowser zu übersetzen.

David M.
quelle
1

In SQL oder MySQL können Sie die Funktionen charoder chrverwenden, um einen ASCII 13 für den \nZeilenvorschub für den Wagenrücklauf einzugeben. Aber wie @David M angegeben hat, möchten Sie höchstwahrscheinlich, dass der HTML-Code diese Unterbrechung anzeigt, und ein br wird funktionieren.

Randy Morris
quelle
1
ASCII 13 ist nicht \r? Gedanke \nwar ASCII 10.
hydroiodic
1
  1. Sie müssen ersetzen \nmit <br/>vor Einsatz in der Datenbank.

    $data = str_replace("\n", "<br/>", $data);

    In diesem Fall sehen Sie in der Datenbanktabelle <br/> anstelle einer neuen Zeile.

    z.B

    First Line
    Second Line

    wird aussehen wie:

    First Line<br/>Second Line

  2. Eine andere Möglichkeit, Daten mit einer neuen Zeile anzuzeigen. Lesen Sie zuerst die Daten aus der Datenbank. Und dann ersetzen \ndurch <br/>zB:

    echo $data;
    $data = str_replace("\n", "<br/>", $data);
    echo "<br/><br/>" . $data;

    Ausgabe:

    First Line Second Line

    First Line
    Second Line


    Details zur Funktion str_replace () finden Sie hier: http://php.net/manual/en/function.str-replace.php

Luftvoll
quelle
2
Sie sollten dazu die native PHP-Funktion nl2br () anstelle von str_replace verwenden.
Bgondy
3
Einverstanden - Sie sollten immer vermeiden, HTML in Ihre Datenbank aufzunehmen. Dies sollte in Ihrem Code erfolgen - behalten Sie die Rohdaten in den Tabellen.
Scott
Tatsächlich. Bitte fügen Sie niemals rohen HTML-Code in den Text der Datenbank ein ... Es wird zu einem Alptraum für die Wartung. Was werden Sie tun , wenn jemand die normalen Zeichen verwendet werden <, >und &in ihrem Text ... entfliehen es? Wenn ja, wie können Sie vermeiden, dass <br/>Sie dem eingefügten entkommen ? Sie erstellen ein Problem, das nicht gelöst werden kann.
Stijn de Witt
@Scott :: Soweit ich weiß, haben die meisten Rich-Text-Editoren HTML-Code in die Datenbank gestellt. Es kommt also darauf an, wie Sie mit Code umgehen.
Airful
@StijndeWitt :: Je nach Situation können Sie HTML-Tags mit regulären Ausdrücken leicht erkennen, um das Entkommen von Sonderzeichen zu vermeiden.
Airful
-3

Sie können einfach alle \ndurch ein <br/>Tag ersetzen, sodass beim Anzeigen der Seite die Linie unterbrochen wird.

UPDATE table SET field = REPLACE(field, '\n', '<br/>')
uttam
quelle