在我的項目中用戶可以寫評論[純文本],並查看其他評論,可以刪除自己的評論,但無法更新評論!
在這種情況下,我應該使用?varchar vs text - MySQL
Text or Varchar(4048)?
Text和Varchar的優點和缺點(像4000這樣大)?
如果我只替換'<'和'& lt',它足夠安全嗎?和'>'與'& gt';'確保一切都很好?
[我不想把所有那些喜歡「」& ......,爲了節省空間,我只是想確保用戶無法寫javascript]
定於前端的限制
在我的項目中用戶可以寫評論[純文本],並查看其他評論,可以刪除自己的評論,但無法更新評論!
在這種情況下,我應該使用?varchar vs text - MySQL
Text or Varchar(4048)?
Text和Varchar的優點和缺點(像4000這樣大)?
如果我只替換'<'和'& lt',它足夠安全嗎?和'>'與'& gt';'確保一切都很好?
[我不想把所有那些喜歡「」& ......,爲了節省空間,我只是想確保用戶無法寫javascript]
定於前端的限制
爲了保護自己免受XSS攻擊,使用htmlentities函數對其進行編碼
除此之外,數據類型的選擇主要與內容的大小有關。如果它可能超過4048個字符,則使用文本數據類型。如果許多帖子很大,使用文本數據類型可能會減少浪費的數據空間,並且可能會比巨大的varchar執行得稍微好一些,但這取決於您的情況,最好測試替代方案。
我通常更喜歡varchar,因爲從編碼的角度來看它更容易處理,如果沒有其他內容,並且如果內容可能超過varchar的大小則回退到文本。
我只是在等待聽到XSS,如何有人可以做出與< and >的XSS,因爲我認爲沒有< and >腳本失去了它的力量,如果你能舉一些例子來說明究竟是哪個字符轉換(htmlentitles)到注意安全 ? – Sourav 2011-04-21 03:41:46
不要試圖分散角色。特別是當你超出UTF8字符集時,事情變得非常棘手。使用htmlentities函數是最簡單的,也是最好的選擇,我想不出一個原因,不要僅僅用它來嘗試自己做別的事情。 http://php.net/manual/en/function.htmlentities.php上有很多例子。 – squawknull 2011-04-21 03:58:42
應在使用_displaying_文本時使用'htmlentities',而不是在存入數據庫時使用'htmlentities'。 – 2016-08-20 22:44:31
的Varchar通常更快,在檢索時規模是合理的,因爲它是存儲的表,其中的文本存儲假表的指針位置內。
感謝
如果varchar的大小是4000,它會更快嗎?和thnx回覆:) – Sourav 2011-04-21 03:38:17
這取決於你使用的硬件,你最好做一個基準。謝謝... – 2011-04-21 03:40:05
如果您在varchars中存儲了大量的大值,那麼在許多數據庫中存在增加的數據文件碎片的可能性。使用mysql,它會變得更加複雜,因爲它取決於具體的存儲引擎是如何工作的(並且這總是會隨時發生變化)。因此,如果我認爲大部分字段都會在較小的範圍內,那麼只需使用varchar即可。如果很多會很大,請使用文本。 – squawknull 2011-04-21 03:52:45
它取決於應用程序行爲。在塊表內分配的空間減少了其他列的空間,並減少了其內部的密度數據。如果mysql使用全表掃描,則掃描很多塊,效率不高。 所以它取決於你的SQL請求。
(你有多個問題。我將解決一個是在標題)
VARCHAR(4000)
和TEXT
之間的唯一區別是INSERT
將截斷要麼4000 字符或65536 字節,分別。
對於小於4000的值,有些情況下複雜SELECT
中的臨時表將運行得更快,例如VARCHAR(255)
比TINYTEXT
快。出於這個原因,我覺得不應該使用TINYTEXT
。
任何人都可以說或猜測FB/Orkut用於保存文本的內容:O? – Sourav 2011-04-21 03:44:25