2011-04-21 58 views
2

在我的項目中用戶可以寫評論[純文本],並查看其他評論,可以刪除自己的評論,但無法更新評論!
在這種情況下,我應該使用?varchar vs text - MySQL

Text or Varchar(4048)
Text和Varchar的優點和缺點(像4000這樣大)
如果我只替換'<'和'& lt',它足夠安全嗎?和'>'與'& gt';'確保一切都很好
[我不想把所有那些喜歡「」& ......,爲了節省空間,我只是想確保用戶無法寫javascript]

定於前端的限制

+0

任何人都可以說或猜測FB/Orkut用於保存文本的內容:O? – Sourav 2011-04-21 03:44:25

回答

1

爲了保護自己免受XSS攻擊,使用htmlentities函數對其進行編碼

除此之外,數據類型的選擇主要與內容的大小有關。如果它可能超過4048個字符,則使用文本數據類型。如果許多帖子很大,使用文本數據類型可能會減少浪費的數據空間,並且可能會比巨大的varchar執行得稍微好一些,但這取決於您的情況,最好測試替代方案。

我通常更喜歡varchar,因爲從編碼的角度來看它更容易處理,如果沒有其他內容,並且如果內容可能超過varchar的大小則回退到文本。

+0

我只是在等待聽到XSS,如何有人可以做出與< and >的XSS,因爲我認爲沒有< and >腳本失去了它的力量,如果你能舉一些例子來說明究竟是哪個字符轉換(htmlentitles)到注意安全 ? – Sourav 2011-04-21 03:41:46

+0

不要試圖分散角色。特別是當你超出UTF8字符集時,事情變得非常棘手。使用htmlentities函數是最簡單的,也是最好的選擇,我想不出一個原因,不要僅僅用它來嘗試自己做別的事情。 http://php.net/manual/en/function.htmlentities.php上有很多例子。 – squawknull 2011-04-21 03:58:42

+0

應在使用_displaying_文本時使用'htmlentities',而不是在存入數據庫時​​使用'htmlentities'。 – 2016-08-20 22:44:31

3

的Varchar通常更快,在檢索時規模是合理的,因爲它是存儲的表,其中的文本存儲假表的指針位置內。

感謝

+0

如果varchar的大小是4000,它會更快嗎?和thnx回覆:) – Sourav 2011-04-21 03:38:17

+0

這取決於你使用的硬件,你最好做一個基準。謝謝... – 2011-04-21 03:40:05

+0

如果您在varchars中存儲了大量的大值,那麼在許多數據庫中存在增加的數據文件碎片的可能性。使用mysql,它會變得更加複雜,因爲它取決於具體的存儲引擎是如何工作的(並且這總是會隨時發生變化)。因此,如果我認爲大部分字段都會在較小的範圍內,那麼只需使用varchar即可。如果很多會很大,請使用文本。 – squawknull 2011-04-21 03:52:45

1

它取決於應用程序行爲。在塊表內分配的空間減少了其他列的空間,並減少了其內部的密度數據。如果mysql使用全表掃描,則掃描很多塊,效率不高。 所以它取決於你的SQL請求。

2

(你有多個問題。我將解決一個是在標題)

VARCHAR(4000)TEXT之間的唯一區別是INSERT將截斷要麼4000 字符或65536 字節,分別。

對於小於4000的值,有些情況下複雜SELECT中的臨時表將運行得更快,例如VARCHAR(255)TINYTEXT快。出於這個原因,我覺得不應該使用TINYTEXT