2008-10-20 60 views
271

我需要在MySQL表中存儲url。定義一個將保存長度不確定的URL的字段的最佳做法是什麼?URL的最佳數據庫字段類型

+1

這取決於你需要什麼,索引,唯一性? – 2016-11-03 19:04:32

回答

257
  1. Lowest common denominator max URL length among popular web browsers: 2,083 (Internet Explorer)在VARCHAR列

  2. http://dev.mysql.com/doc/refman/5.0/en/char.html
    值是可變長度的字符串。在MySQL 5.0.3之前,長度可以指定爲0到255之間的值,5.0.3和更高版本中的長度可以爲0到65,535。 MySQL 5.0.3及更高版本中VARCHAR的有效最大長度取決於最大行大小(65,535字節,在所有列中共享)和使用的字符集。

  3. 所以...
    <的MySQL 5.0.3使用TEXT

    > = 5.0.3的MySQL使用VARCHAR(2083)

+12

很好的答案,但是我個人會限制長度。根據項目你可能想限制接受的網址。誰使用比200年的url longet? – John 2010-08-20 12:00:31

32

VARCHAR(512)(或類似的)應該是足夠的。但是,由於您並不真正瞭解相關網址的最大長度,因此我可能會直接致電TEXT。由於CLOBs遠低於像VARCHAR這樣的簡單字符串數據類型,因此這種危險當然會損失效率。

+0

排序規則如何? – kommradHomer 2017-03-30 15:02:18

14

varchar(max)爲SQLServer2005的

varchar(65535)爲MySQL 5.0.3以後

這將分配存儲空間的需求,應該不會影響性能。

+1

在你的代碼片段中,'max'是一個神奇的ANSI SQL說明符,用於根據需要增加VARCHAR大小,還是僅僅爲了舉例而變量變量? – 2008-10-20 19:33:51

+1

這是一個SQL2005語法。編輯。 。 。 – 2008-10-20 19:36:50

+4

在MySQL中,你很可能不能有一個很大的varchar,除非它是表中唯一的一列。 – carson 2008-10-20 19:41:34

0

大多數Web服務器都具有URL長度限制(這就是爲什麼「URI過長「),這意味着有一個實際的大小。找到最流行的Web服務器的默認長度限制,並使用其中最大的作爲該字段的最大大小;它應該綽綽有餘。

1

你最好使用varchar(max)其中(按尺寸)意思是varchar (65535)。 這甚至會存儲您較大的網址,並且也會節省您的空間。

最大說明符擴展了varchar, nvarchar和varbinary數據類型的存儲功能。 varchar(max),nvarchar(max)和varbinary(max)統稱爲大值數據類型。您可以使用大數值數據類型 來存儲最多2^31-1個字節的數據。

this article TechNet上的有關使用使用大值數據類型

6

你會想基於一個TEXT或VARCHAR列之間進行選擇多久網址將被用於以及是否實際需要長度才能解除綁定。

使用VARCHAR與最大長度> = 爲micahwittman建議,如果:

  1. 你會使用大量的每個查詢的網址(不像TEXT列,VARCHAR處理都內嵌行存儲)
  2. 你很確定一個URL永遠不會超過65,535字節的行限制。

使用TEXT如果:

  1. 的URL真的可能打破65,535字節行限制
  2. 您的查詢不會一次選擇或更新一堆網址(或經常) 。這是因爲TEXT列只是內嵌一個指針,並且涉及檢索引用數據的隨機訪問會很痛苦。
4

這真的取決於你的使用情況(見下文),但存儲爲TEXT有性能問題,和一個巨大的VARCHAR聽起來像矯枉過正大多數情況下。

我的做法:使用一個慷慨的,但不是不合理的大VARCHAR的長度,如VARCHAR(500)左右,並鼓勵誰需要一個較大的URL使用URL縮短服務,如safe.mn用戶。

Twitter的做法:對於一個非常好的UX,提供過長的網址自動縮短網址和鏈接的「顯示版本」存儲爲URL的,並在最後橢圓的一個片段。 (例如:http://stackoverflow.com/q/219569/1235702將顯示爲stackoverflow.com/q/21956...並會鏈接到一個縮短的URL http://ex.ampl/e1234

說明和注意事項

  • 顯然,Twitter的做法是更好的,但是對於我的應用程序的需求,推薦一個網址縮短者就足夠了。
  • 網址縮寫有其缺陷,如安全問題。就我而言,這不是一個巨大的風險,因爲這些URL不公開,並且沒有被大量使用。但是,這顯然不適用於所有人。 safe.mn似乎阻止了大量的垃圾郵件和網絡釣魚URL,但我仍然建議小心。
  • 請務必注意,您不應強制用戶使用URL縮短器。對於大多數情況(至少對於我的應用程序的需要),500個字符對於大多數用戶將用於它的用戶來說已經足夠了。 只能使用/推薦超短鏈接的URL縮短器。
7

您應該使用帶有ASCII字符編碼的VARCHAR。 URL是百分比編碼,國際域名使用punycode,所以ASCII碼足以存儲它們。這將比UTF8使用更少的空間。

VARCHAR(512) CHARACTER SET 'ascii' COLLATE 'ascii_general_ci' NOT NULL 
相關問題