storing long text

Asked
Viewd4518

1

what is the best way to store long texts (articles) in a database? it doesnt need to be searchable.

i want to allow ppl to read the first chapter of every book in my bookstore. dumping it into a database field makes it difficult to style paragraphs using css..

EDIT: access database

10 ответов

0

Используйте CLOB .

  • @David W. Fenton: for the Access Database Engine, CLOB = MEMO, BLOB = OLEOBJECT.

    onedaywhen23 сентября 2009, 07:52
  • И какие версии Access / Jet / ACE поддерживают CLOB?

    David-W-Fenton23 сентября 2009, 01:48
  • yea i red that in wikipedia.. but wt does it stand for fisicly? is a PDF file a CLOB?

    Noam Smadja22 сентября 2009, 13:11
  • is this CLOB thing a system or something? can u show me an example plz.

    Noam Smadja22 сентября 2009, 13:05
  • BLOB <> OLEOBJECT в Jet / ACE. Вы можете хранить двоичные данные в поле BLOB без оболочки OLE, а также читать и записывать в него с помощью команд Chunk ().

    David-W-Fenton24 сентября 2009, 07:31
  • Since the C in CLOB stands for “character”, I would not use a CLOB to store binary data like a PDF. That’s what a BLOB is for. You guessed it, B is for “binary” :)

    22 сентября 2009, 13:43
  • CLOB = Character Large Object

    Russ Cam22 сентября 2009, 13:08
  • The fact that it’s not an OLEOBJECT is an advantage. Anyone who’s tried to extract data programatically from OLE fields knows it’s a major pain in the ass. The fact that the Jet/ACE BLOB is not an OLE field is clearly an advantage, though it does mean you have to read/write the data in code instead of relying on bound controls. But bound OLE fields are themselves incredibly problematic, so this is yet another advantage, rather than a drawback.

    David-W-Fenton25 сентября 2009, 00:39
-1

Поместите его в поле TEXT и поместите вместе с их <p>, чтобы вы могли стилизовать абзацы.

Поскольку он не должен быть доступен для поиска, это не повлияет на вашу производительность sql.

0

The following applies to Jet 4.0 only, being the version of the Access Database Engine in the era Access2000 to Access2003 inclusive:

I wouldn't store any of the documents in the database, but store the data in files in the file system, and the only thing that's in the database would be a pointer to the data files.

You don't give any details in your question that would suggest any need whatsoever to store the documents in the database itself.

And there are very few circumstances where it's advantageous.

If you are using ACE, being the version of the Access Database Engine in the Access2007 era, the Attachment data type would be an option, however I don't really know how it works, I've never used it so I can't recommend it nor say whether it's better or worse for this purpose. I'm also wary of new data types in the first release of a major version of the Access Database Engine. I just remember all the issues with byte and decimal fields at the introduction of Jet 4 and don't want to commit to something that may never work properly. The Attachment type in the ACCDB format was introduced for Sharepoint compatibility, and that outside dependency is something that gives me pause. Will the ACCEDB data type change someday if Sharepoint changes the way it works? I'm not sure I'd want to take that risk.

  • Could you at the very least remove the personal pronouns from the text you copied from my answer? As it stands, you’re claiming something as your policy that isn’t. In fact, there’s almost nothing in this post that you didn’t lift from my answer or my comments. Yet, you’re presenting it as though these are your thoughts. You’re a real piece of work.

    David-W-Fenton03 октября 2009, 01:42
  • Well, if I were editing your version of my post, I’d delete the first paragraph, as it is WRONG, and then indicate that all the rest was a quote of a different post of mine with the addition of selected comments. Is that what you want? If so, I’ll edit it, but I have a feeling you wouldn’t be happy with that – you seem insistent on having the incorrect 1st paragraph included. It’s your post – you fix it. I’ve already posted an answer along with voluminous comments that make it quite clear what my position on the issue is. And I believe my answer is correct as it stands.

    David-W-Fenton06 октября 2009, 03:00
  • … и я не верю, что информация о полях вложений относится к моему ответу, так как это было ваше предложение в комментарии, и я сказал то, что знаю об этом, а это немного. Это не часть моего ОТВЕТА - это часть того, что я не предлагал в качестве решения, хотя это могло быть возможным решением. Я просто не могу поручиться за него.

    David-W-Fenton06 октября 2009, 03:01
  • IMO the ideal community member would write answers in the third person, wiki style, to facilitate editing by other users. Any chance of making this your personal ‘policy’? If you edit your answer accordingly, I will re-do the copy+paste job. Alternatively, edit my answer; I am highly unlikely to rollback any edit where someone has removed personal pronouns and the like.

    onedaywhen05 октября 2009, 12:11
1

I wouldn't store any of the documents in the database, but store the data in files in the file system, and the only thing that's in the database would be a pointer to the data files.

You don't give any details in your question that would suggest any need whatsoever to store the documents in the database itself.

And there are very few circumstances where it's advantageous.

  • Anyhow, I don’t want to upset you or mar your enjoyment of this fantastic site so I’ve taken Spolsky’s advice and posted a ‘copy&poste’ version as a new answer. Feel free to edit it ;)

    onedaywhen30 сентября 2009, 07:58
  • As to the possibility of adding in the reference to the Attachments type, I’ve never used it so I can’t recommend it nor say whether it’s better or worse for this purpose. I do know that it was added for Sharepoint compatibility, not because anybody was clamoring for an Attachments type in Access.

    David-W-Fenton28 сентября 2009, 19:46
  • Also, in regard to the whole reputation thing, my post begins “I wouldn’t store any of the documents in the database” – it’s a statement of my practices. Changing that completely alters the content of the answer I posted. PLEASE JUST STOP EDITING MY ANSWERS INAPPROPRIATELY.

    David-W-Fenton25 сентября 2009, 22:42
  • Last of all, the Attachment type in the ACCDB format was introduced for Sharepoint compatibility, and that outside dependency is something that gives me pause. Will the ACCEDB data type change someday if Sharepoint changes the way it works? I’m not sure I’d want to take that risk.

    David-W-Fenton25 сентября 2009, 22:40
  • I don’t want the reputation from your words. Endorsing the attachment type is not something I can do as I haven’t used them. Every time you edit this post, I will roll it back, and I mean EVERY SINGLE DAY.

    David-W-Fenton25 сентября 2009, 22:38
  • I don’t want to PLONK you because your posts are great. It’s just your habit of inappropriate edits that annoys me.

    David-W-Fenton25 сентября 2009, 22:38
  • …and when I edit your posts your still get the rep for them.

    onedaywhen25 сентября 2009, 12:05
  • @David W. Fenton: why don’t you just say, “PLONK”, put me in your killfile and be done with it? Oh yeah, I remember now: this isn’t a newsgroup, it’s a collaboration site.

    onedaywhen25 сентября 2009, 12:05
  • Тема обсуждения определяется исходным вопрошающим. Тема - MS-ACCESS. Мой ответ относится ко ВСЕМ версиям Access. Вы подняли вариант, доступный в ОДНОЙ версии Access. Вы можете улучшить обсуждение, опубликовав свой ответ, в котором указывается на этот вариант.

    David-W-Fenton28 сентября 2009, 19:45
  • Я искренне ценю попытку лести, но сомневаюсь в искренности :) Держу пари, если бы вы выполнили поиск в Google по запросу «David W. Fenton» + PLONK, то я бы оказался на первой странице результатов;)

    onedaywhen28 сентября 2009, 09:23
  • @onedaywhen: «access-2007 - это подмножество ms-access». Отправьте f-ing ответ, который предлагает тип данных вложения, если OP использует A2007. На вопрос, в котором не указан A2007, не следует ожидать получения ответов только для A2007, которые не соответствуют исключению A2007.

    David-W-Fenton25 сентября 2009, 00:31
  • Are you accusing me of “pimping [my] business interests”?

    David-W-Fenton03 октября 2009, 01:17
  • access-2007 is a subset of ms-access.

    onedaywhen24 сентября 2009, 08:03
  • If you think my behaviour is contrary to the spirit of this site or its written rules then feel free to call a moderator. As for you: calling people names, using profanity, pimping your business interests, not honouring the ‘favour editing over answering’ spirit… all adds to the fun as far as I’m concerned ;) I wonder if SO has a key on user name or whether I could create a duplicate ‘David W. Fenton’ the polite wiki advocate, a non-egoist team-player who is open-minded enough to see merit on both sides of any given issue…?

    onedaywhen02 октября 2009, 12:18
  • @David W. Fenton: “I wouldn’t store any of the documents in the database, but store the data in files in the file system” – what’s wrong with the Attachment data type?

    onedaywhen23 сентября 2009, 07:57
  • For your informatino, I’ve been posting on Usenet in Access forums since 1996. As regards to you and SO, I think you don’t understand collaborative editing. You have edited things into my answers that contradict what was originally said (regardless of author), or that introduce errors, or that are irrelevant to the thrust of the answer in the first place. You seem to want to change my answers to what you would have answered, no matter how much that completely negates my answer.

    David-W-Fenton06 октября 2009, 03:04
  • Опять же, меня это не убедило. Было время, когда я отредактировал один из ваших ответов, чтобы добавить примеры кода ADO для соответствия вашему DAO, и вы обиделись (а мы так и не разобрались в том, что вы имеете в виду под «родным»). Затем был момент, когда вы поздравили меня с хорошей редакцией, но все же просили меня не редактировать ваши ответы! Единственный вид сотрудничества, который вы считаете приемлемым, - это когда моя редакция четко отделена от вашей, где в каждой отдельной части указано имя автора.

    onedaywhen06 октября 2009, 15:30
  • You couldn’t give a rat’s backside but here it is again: Editing versus Answering? by Joel Spolsky: I’d really like to see people editing answers to make them better rather than providing new answers. Editing definitely runs the risk of muddying the “ownership” of an answer, as multiple people contribute to the “best” answer. Tough. This isn’t a site for egoists, who should feel free to go back to the old days of single-author book publishing. It’s a place for team players who want to work together to provide great answers. http://meta.stackexchange.com/questions/15839/editing-versus-answering

    onedaywhen30 сентября 2009, 07:50
  • @David W. Fenton: All I ask is that you relocate relevant information that you have you conveyed in comments into your main answer. It’s perfectly OK that your answer only relates to one version of the Access Database Engine if you make that clear. Even better if you also include you reasons for avoiding ACE Attachments. Don’t you agree that adding information about Access2007 enhances your answer? How could that make it ‘inappropriate’? I cannot add an answer of my own because I have no experience of storing files using the Access Database Engine.

    onedaywhen28 сентября 2009, 09:03
  • Please stop editing my posts to read the way you want them to read. Post your own answer with the Attachments option. I am no longer accepting your edits if they change the nature of the answer instead of clarifying it – I am going to roll back all of them that do so and I will continue the rollback war until you stop. Post your own answers. Get credit for your own ideas instead of trying to hijack someone else’s answers with them.

    David-W-Fenton25 сентября 2009, 00:30
  • I don’t see the 2007 tag on this question, so, the Attachment data type would not be an option. I don’t really know how it works and I’m also wary of new data types in the first release of a major version of the Jet db engine. I just remember all the issues with byte and decimal fields at the introduction of Jet 4 and don’t want to commit to something that may never work properly.

    David-W-Fenton24 сентября 2009, 07:30
  • Do you think SO is better for having my contributions or not? If so, then I suggest you not follow through on the threat of creating a sock-puppet user to impersonate me. If you do that, I’ll leave the site permanently, but not before I finish deleting all my posts. I don’t need problem people like you, and if you don’t want my contributions, I definitely have plenty of other forums where I can offer my help.

    David-W-Fenton03 октября 2009, 01:19
  • @onedaywhen asks: “How does adding a disclaimer such as, ‘This answer only applies to Jet 4.0’ alter the meaning of what you originally posted?” Because IT WOULDN’T BE TRUE – my answer applies to ALL VERSIONS OF JET. That the ACE adds a new data type in no way negates that statement – and given that I don’t know if the new data type is an appropriate answer to the problem (and neither do you, by your own admission), I don’t see how a mention of it belongs in the answer I gave.

    David-W-Fenton02 октября 2009, 01:59
  • @David W. Fenton: OK, my mind and ears are open. How does adding a disclaimer such as, ‘This answer only applies to Jet 4.0’ alter the meaning of what you originally posted? How does pointing out the existence of a potentially relevant data type in the current version of the engine do harm to your position? I rather think that you prefer to self-author biased, opinionated pieces than collaborate with others to produce more rounded, inclusive answers and in doing so find yourself at odds with the creators of this site…

    onedaywhen30 сентября 2009, 07:48
  • Возможно, вы не поверите, что я искренен, но я искренен - ​​ваши сообщения на этом форуме очень качественные, и вы много добавляете в обсуждения. Но ваш подход к редактированию ответов других людей, на мой взгляд, совершенно ошибочен - вы часто меняете значение того, что было изначально опубликовано, и я думаю, что это неправильное изменение.

    David-W-Fenton28 сентября 2009, 19:48
  • На карту поставлено не столько мое авторство, сколько цель SO, которая заключается в улучшении содержания ответов. Виды правок, которые вы применили к моим сообщениям, ухудшают качество информации не потому, что вы удаляете или изменяете мои золотые высказывания, а потому, что вы меняете их таким образом, который не делает их лучше. В данном случае это особенно неприятно, так как вы просто должны были опубликовать свой собственный ответ (с соответствующей квалификацией, чтобы указать на отсутствие прямого опыта), вместо того, чтобы пытаться захватить, который действительно не имел большого отношения к тому, что вы пытались ввести обсуждение.

    David-W-Fenton06 октября 2009, 03:06
  • You imply the decision is mine. If you truly have opportunities to contribute to other forums then I’d say go for it, on grounds that you are likely to find a better fit for your philosophy than SO (Usenet perhaps?) I have you down as a wolf rather than a sheep, lonely perhaps but I know you’d do well. I’d appeal to your better nature and encourage you not to delete your SO answers out of spite. But be assured, I’m not about to hound you off the site with a sock puppet. My own interest in SO is waning. It’s a nice idea but you have revealed a few of its flaws to me.

    onedaywhen05 октября 2009, 13:45
  • You’re right about my not giving a rat’s ass about Spolsky’s article. But I see what you are suggesting as completely wrongheaded – you admit you won’t post the suggestion as an answer yourself because you haven’t used the Attachments data type. But neither have I, so how would it be appropriate for me to include a mention of it, or for you to edit that mention into my post (where it would look like it’s coming from me, not from you)?

    David-W-Fenton02 октября 2009, 02:00
0

I would propose storing the first chapter as pdf file. This is secure and allows for good formatting. Then use a blob, clob, varchar, or text field depending on your product (see the other answers).

Or you could use images and look into something like amazone's "look inside". It would work with the same db techniques.

Alternatively you could use something like markup.

I personally do not like to put html in my database. Even if it is only for output. Too easy to put in some javascript. But maybe I'm just too cautious.

  • Я ненавижу использовать PDF в Интернете ... загрузка простого текста занимает много времени ... и обычно вы застреваете с загрузкой, замораживая все остальное в браузере ...

    Noam Smadja22 сентября 2009, 13:07
  • Медленно, потому что вы загружаете его через Интернет. Локальный доступ вообще не должен быть проблемой. -1 к вашему комментарию, если я могу проголосовать против комментариев.

    David-W-Fenton24 сентября 2009, 07:32
1

you have several options:

  • store it as a long single string with no formatting, which will look bland on the screen.

  • store it as a long single string with embedded html and css, which will be a bad choice if you ever want to make your site have a different look/feel.

  • normalize it so you have tables to store books, chapters, paragraphs, etc. you could then format and style the text as you load it into the application.

1

Я не знаю, какую базу данных вы используете, но если текст не должен быть доступен для поиска, вы можете просто сохранить текст в формате HTML (например, значение, поступающее из FCKEditor или подобных компонентов). Если вам также нужна возможность поиска, вы можете хранить как HTML, так и простой текст в двух разделенных полях.

Поля могут иметь вид nvarchar (MAX), если вы используете MS SQL Server 2008 или любой эквивалентный тип данных в других базах данных.

РЕДАКТИРОВАТЬ: Похоже, вы используете Access, поэтому выберите тип данных Memo! Если вы решите сохранить HTML, подумайте о том, чтобы сохранить только общую разметку (div, p) для разделения текста, а затем применить форматирование CSS, заключая сохраненный текст в другой div, определяя классы форматирования для дочерних элементов.

1

Основное различие между длинным текстом (CLOB / TEXT / VARCHAR(MAX)) и длинными данными (BLOB / IMAGE / VARBINARY(MAX)) заключается в том, что первый подвержен преобразованию набора символов, а первый - нет.

Если вам нужно преобразовать набор символов на стороне базы данных, используйте CLOB и аналогичные.

Если вы всегда хотите получать данные в том виде, в каком вы их храните, побайтово (а не посимвольно), используйте BLOB и аналогичные.

  • Ваш ответ не совсем зависит от Access. Вы можете это пояснить?

    David-W-Fenton23 сентября 2009, 01:47
  • Он был дан до того, как автор упомянул Access. Извините, я не специалист по Access.

    Quassnoi23 сентября 2009, 09:14
0

For SQL Server

TEXT / NTEXT for SQL Server 2000

VARCHAR(MAX) / NVARCHAR(MAX) for SQL Server 2005 onwards

3

Если это sql server 2005, ИСПОЛЬЗУЙТЕ VARCHAR (MAX)

ИЗМЕНИТЬ,

Кажется, он разрешил доступ,

так что я бы пошел с памяткой

До 63 999 символов. (Если Заметка поле управляется через DAO и только текст и числа [не двоичные data] будет храниться в нем, тогда размер поля Memo ограничен размер базы данных.)

или объект OLE (если можно)

Объект (например, Microsoft Excel электронная таблица, Microsoft Word документ, графика, звуки или другое двоичные данные) связаны (ссылка OLE / DDE: A соединение между объектом OLE и свой OLE-сервер или между динамическим Исходный документ обмена данными (DDE) и целевой документ.) в или встроенный (встроенный: чтобы вставить копию объект OLE из другого применение. Источник объекта, называется сервером OLE, может быть любым приложение, поддерживающее объект связывание и встраивание. Изменения в встроенный объект не отражается в исходный объект.) в Microsoft Таблица доступа.

До 1 гигабайта (ограничено доступным место на диске)

  • OLE data types is a terrible recommendation. It ties the use of the data to the app registered on the machine where each OLE field is populated. Incompatibilities cross version can make the data inaccessible. The overhead is also quite horrendous (like 64KBs for a 1-byte Word document). A BLOB field might be one answer.

    David-W-Fenton23 сентября 2009, 01:47
  • Я полностью согласен, это была просто рекомендация, и я не знал, что в доступе есть поле blob ???

    Adriaan Stander23 сентября 2009, 04:58
  • VARCHAR(MAX) supercedes use of deprecated TEXT datatype in SQL Server 2005 onwards.

    Russ Cam22 сентября 2009, 13:03
  • Why varchar instead of text/blob ? Isn’t varchar used for usually short strings ?

    Clement Herreman22 сентября 2009, 13:01