在MySQL INSERT INTO文本中添加换行符


78

有人可以告诉我如何在MySql表中输入的文本中添加新行吗?

我尝试'\n'在与INSERT INTO语句一起输入的行中使用,但'\n'按原样显示。

实际上,我已经在MS Access中创建了一些数据表。MS Access用添加新行'\n'。我正在将MS Access表数据转换为MySql。但是,当我进行转换时,'\n'当我从PHP表单上的MySql表中显示文本时,它将被忽略并且所有文本都显示在一行中。

谁能告诉我MySQL如何在文本中添加新行?等待回应,谢谢!


Answers:


74

如果您同意跨多行的SQL命令,那么oedo的建议是最简单的:

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

我只是遇到了一种情况,那就是最好将SQL语句全部放在一行上,因此我发现结合使用CONCAT_WS()CHAR()为我工作。

INSERT INTO mytable (myfield) VALUES (CONCAT_WS(CHAR(10 using utf8), 'hi this is some text', 'and this is a linefeed.', 'and another'));

不是的组合CARRIAGE RETURNLINE FEED使用CHAR(13),并CHAR(10)通常建议的兼容性?CR等同于\rLF等效于\n
Fr0zenFyr

33

在实际的SQL查询中,您只需添加换行符

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

24

作为记录,我想在现有数据中添加一些换行符,然后我就\n可以正常工作了...

样本数据:

Sentence. Sentence. Sentence

我做了:

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

但是,它也适用于just\r和just \n


4
不幸的是,如果您的文字中有缩写,例如“史密斯先生”,则无法使用,该缩写将分为两行。
蓝色

1
谢谢,这对我正在解析并且无法分开插入中的实际行的情况很有帮助
salonMonsters

请注意,通常在UNIX服务器环境中只希望使用\ n,而在仅Windows服务器环境中则只希望使用\ r \ n。不要单独使用\ r。这里讨论这些含义,只是要注意使用“ \ r”的支持“ Mac”的信息已经过时了-Mac仅使用标准的Unix“ LF”(\ n)已有15年了。-> stackoverflow.com/questions/1552749/…–
XP84

1
@ XP84好点!我将走得更远,采取的立场是,数据库中的文本应该与平台无关,因此\n只能使用。这是大多数此类系统处理它的方式。例如,Git。(可选)您可以在Windows系统上阅读后替换\n\r\n,但大多数情况下甚至不需要它。大多数Windows组件仅适用于\n。记事本是一个明显的例外。
Stijn de Witt

精彩!我已经转换了一个数据库,并且错误地插入了'\ n'和'\ r'字符。我仅用两个陈述来处理它:UPDATE table SET field = REPLACE(field, '\\r', '\r');UPDATE table SET field = REPLACE(field, '\\n', '\n');
dhc

15
INSERT INTO test VALUES('a line\nanother line');

\n 在这里很好


@JordanSilva和他的评论的支持者:查看David M的答案,它可能包含您的解决方案。
Stijn de Witt

@StijndeWitt很久以前,我不记得我是如何解决问题的。但是谢谢你的提示。
乔丹席尔瓦

12

在大多数情况下,MySQL都可以记录换行符,但是问题是,您需要<br />在实际字符串中使用标签,以便浏览器显示换行符。自从您提到PHP以来,您就可以使用该nl2br()函数将换行符(“ \n”)转换为HTML<br />标记。

像这样使用它:

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

输出(以HTML格式):

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

这是手册的链接:http : //php.net/manual/en/function.nl2br.php


2
注意:默认<br>样式实际上是<br />
Brian Leishman


4

首先,如果要在PHP表单上显示它,则介质为HTML,因此将使用<br />标记呈现新行。检查页面的源HTML-您可能会以换行符的形式呈现新行,在这种情况下,您的问题很简单,就是翻译文本以输出到Web浏览器。


1

在SQL或MySQL中,您可以使用charchr函数输入ASCII 13作为回车\n换行符。但是正如@David M所说,您很可能希望让HTML显示此中断,而br才是有效的方法。


1
ASCII 13不是\r吗?思想\n是ASCII 10
氢碘酸

1
  1. 必须更换\n<br/>之前插入到数据库中。

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

    在这种情况下,您将在数据库表中看到<br/>而不是换行。

    例如

    First Line
    Second Line

    看起来像:

    First Line<br/>Second Line

  2. 用换行查看数据的另一种方法。首先从数据库中读取数据。然后替换\n<br/>例如:

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

    输出:

    First Line Second Line

    First Line
    Second Line


    您可以在此处找到有关函数str_replace()的详细信息:http : //php.net/manual/en/function.str-replace.php


2
您应该使用PHP本机函数nl2br()代替str_replace来执行此操作。
bgondy

3
同意-您应始终避免将HTML放入数据库中。这应该在您的代码中完成-将原始数据保留在表中。
斯科特

确实。请不要在数据库的文本中包含原始HTML。这将成为维护的噩梦。你有什么打算时,有人使用普通字符做<>&在他们的文字...逃生呢?如果是这样,您将如何避免转义<br/>插入的内容?您将创建一个无法解决的问题。
Stijn de Witt

@Scott ::到目前为止,我知道大多数富文本编辑器都将HTML代码放入数据库中。因此,这取决于您如何处理代码。
播出时间为

@StijndeWitt ::根据情况,您可以轻松地使用正则表达式来检测HTML标记,从而避免在转义特殊字符时使用。
播出时间为

-3

您可以简单地将所有标签替换\n<br/>标签,以便在显示页面时将其换行。

UPDATE table SET field = REPLACE(field, '\n', '<br/>')
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.