Додавання розриву рядка в текст MySQL INSERT INTO


78

Хтось може сказати мені, як додати новий рядок у текст, який я ввожу в таблицю MySql?

Я спробував використовувати '\n'рядок, який я ввів із INSERT INTOзаявою, але '\n'відображається таким, яким він є.

Насправді я створив таблицю в MS Access з деякими даними. MS Access додає новий рядок з '\n'. Я перетворюю дані таблиці MS Access у MySql. Але коли я перетворюю, '\n'ігнорується, і весь текст відображається в одному рядку, коли я відображаю його з таблиці MySql у формі PHP.

Хтось може сказати мені, як MySQL може додати новий рядок у текст? Чекаю відповіді, спасибі !!


Знайти відповідь тут stackoverflow.com/a/41448185/5466401
Sibin John Mattappallil

Відповіді:


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 RETURNі LINE FEEDза допомогою CHAR(13)і CHAR(10)зазвичай рекомендована для сумісності? CRеквівалентно \rта LFеквівалентно\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')

Однак це також працювало з справедливим \rі справедливим \n.


4
На жаль, це не спрацьовує, якщо у вашому тексті є скорочення, наприклад "Містер Сміт", які будуть розбиті на 2 рядки.
синюватий

1
дякую, це було корисно для моєї ситуації, коли я роблю синтаксичний аналіз і не можу відокремитись від фактичних рядків у вставці
salonMonsters

Майте на увазі, що загалом ви хочете використовувати лише \ n, якщо в середовищі сервера UNIX, і \ r \ n, якщо в середовищі сервера, лише для Windows. Не використовуйте \ r самостійно. Ось дискусія щодо того, що вони означають, за винятком того, що відомо про те, що інформація про "Mac" з використанням "\ r" жахливо застаріла - Mac використовує стандартний Unix "LF" (\ n) виключно близько 15 років. -> stackoverflow.com/questions/1552749 / ...
XP84

1
@ XP84 Гарна думка! Я пішов би ще далі і зайняв би позицію, що текст у БД повинен бути агностичним щодо платформ і, отже, використовувати \nлише його. Саме так більшість таких систем мають справу з цим. Наприклад, Git. За бажанням ви можете замінити \nна \r\nпри читанні в системі Windows, але в основному ви виявите, що це навіть не потрібно. Більшість компонентів 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 та прихильники його коментаря: перевірте відповідь Девіда М, вона, мабуть, містить ваше рішення.
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 сторінки - можливо, новий рядок може бути відображений просто як розрив рядка, і в цьому випадку ваша проблема полягає лише в перекладі тексту для виведення у веб-браузер.


1

У SQL або MySQL ви можете використовувати функції charабо chrдля введення в 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/>')
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.