我有一個應用程序,涉及使用所見即所得的HTML編輯器存儲和檢索大量用戶格式的內容。有點像是如何保存格式化的問題和答案。在數據庫中存儲格式化內容的標準方式是什麼?
這樣做的標準方法是什麼?
編輯:
只是爲了澄清:我不是問有關數據類型在數據庫中存儲。相反,我關心的是在數據庫中存儲帶有樣式信息的html標籤塊。
我有一個應用程序,涉及使用所見即所得的HTML編輯器存儲和檢索大量用戶格式的內容。有點像是如何保存格式化的問題和答案。在數據庫中存儲格式化內容的標準方式是什麼?
這樣做的標準方法是什麼?
編輯:
只是爲了澄清:我不是問有關數據類型在數據庫中存儲。相反,我關心的是在數據庫中存儲帶有樣式信息的html標籤塊。
這只是文本數據。通常一個VARCHAR
是最好的。
更新: 是的,如果你想支持Unicode(你可能在這種情況下做),那麼做一個NVARCHAR
。
至於OP的更新,你正在想象那些並不存在的困難。 HTML是文本數據,因此它會進入文本字段。你不想將格式與文本分開。
這就是答案,但這不是您對這件事的擔憂。做這件事的原因是困擾你可能是因爲數據庫使用結構化數據(所有數據都在命名和類型列),這是非結構化內容。這意味着該字段中的數據沒有以DB友好的方式存儲。你應該儘可能地構建你的數據,因爲它允許你快速搜索字段值。我們將用戶輸入的任何內容放入該字段中,如果我們需要在該字段中查找數據,則需要搜索整個字段以查找它。這是一個非常緩慢的過程,爲了讓事情變得更糟,我們不僅僅是通過文本進行搜索,而是對文本進行格式化。
這是真的,不好,所以我們應該儘量避免這樣做。如果您可以避免允許用戶輸入自由形式的文本,那麼一定要這樣做。從這一點開始,您可以快速,一致地將HTML格式應用於客戶端應用程序中的數據。
但是,這個問題的基礎是,你想要一個非結構化內容的領域,你問如何存儲非結構化內容。答案非常簡單(即使我猜我第一次嘗試沒有100%正確),請使用NVARCHAR
。
即使存儲這些非結構化內容不是數據庫友好的,它有時也是網站友好的,並且在您描述的情況下是常見做法。需要記住的是我們希望避免搜索這些非結構化數據。我們可能需要採取相當極端的措施才能這樣做。
許多應用程序將通過創建一個單獨的表並將文本解析出HTML並將每個單詞(以及原始表條目的外鍵)插入到要搜索的其他表中來解決此緩慢搜索問題後來。即使你這樣做你仍然想保留原來的格式文本用於顯示目的。
我通常會進行此類優化Phase II
,因爲該網站將在沒有這種優化的情況下運行;它會變得更慢,並且在網站有大量內容需要搜索之前甚至不會被注意到。
另外需要注意的是,通常這不會是HTML格式的文本。有幾種常用的格式,如BBCode或Markdown。 SQL並不在乎,對於你的SQL服務器來說,這些都只是文本。
'VARCHAR'通常不是最好的,因爲我們不知道這些字符是否包含unicode。 – EkoostikMartin
問題的標題可以存儲在VARCHAR
中,問題存儲在TEXT
中。
這裏,看看數據類型的SQL Server:http://msdn.microsoft.com/en-us/library/ms187752.aspx
不要將w3schools用作SQL Server上的參考,請轉到您的特定版本的正確MSDN頁面以查看有效的數據類型。 – EkoostikMartin
@EkoostikMartin對不起,我已刪除鏈接。 –
之所以沒有其他人發帖是因爲最好的答案已經給出(並在隨後冗長詳細闡述)。如果你不相信我去看看SourceForge的所有PHP項目。如果它們接受格式化輸入,則它們使用VARCHAR或TEXT字段(或NVARCHAR,NTEXT),並且沒有關於實際存儲方式的特殊內容。如果你需要更多關於這個過程的信息,那麼我們需要更多的解釋你的問題。 – krowe