我需要在MySQL表中存儲url。定義一個將保存長度不確定的URL的字段的最佳做法是什麼?URL的最佳數據庫字段類型
回答
Lowest common denominator max URL length among popular web browsers: 2,083 (Internet Explorer)在VARCHAR列
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字節,在所有列中共享)和使用的字符集。所以...
<的MySQL 5.0.3使用TEXT
或
> = 5.0.3的MySQL使用VARCHAR(2083)
很好的答案,但是我個人會限制長度。根據項目你可能想限制接受的網址。誰使用比200年的url longet? – John 2010-08-20 12:00:31
VARCHAR(512)
(或類似的)應該是足夠的。但是,由於您並不真正瞭解相關網址的最大長度,因此我可能會直接致電TEXT
。由於CLOB
s遠低於像VARCHAR
這樣的簡單字符串數據類型,因此這種危險當然會損失效率。
排序規則如何? – kommradHomer 2017-03-30 15:02:18
varchar(max)
爲SQLServer2005的
varchar(65535)
爲MySQL 5.0.3以後
這將分配存儲空間的需求,應該不會影響性能。
在你的代碼片段中,'max'是一個神奇的ANSI SQL說明符,用於根據需要增加VARCHAR大小,還是僅僅爲了舉例而變量變量? – 2008-10-20 19:33:51
這是一個SQL2005語法。編輯。 。 。 – 2008-10-20 19:36:50
在MySQL中,你很可能不能有一個很大的varchar,除非它是表中唯一的一列。 – carson 2008-10-20 19:41:34
大多數瀏覽器會讓你放very large amounts of data in a URL,因此很多事情最終會創建非常大的URL,所以如果你談論的不僅僅是URL的域部分,你將需要使用自VARCHAR/CHAR are limited以來的TEXT列。
我不知道其他瀏覽器,但IE7 has a 2083 character limit for HTTP GET operations。除非任何其他瀏覽器具有較低的限制,否則我不明白爲什麼您需要比2083更多的字符。
大多數Web服務器都具有URL長度限制(這就是爲什麼「URI過長「),這意味着有一個實際的大小。找到最流行的Web服務器的默認長度限制,並使用其中最大的作爲該字段的最大大小;它應該綽綽有餘。
你最好使用varchar(max)其中(按尺寸)意思是varchar (65535)
。 這甚至會存儲您較大的網址,並且也會節省您的空間。
最大說明符擴展了varchar, nvarchar和varbinary數據類型的存儲功能。 varchar(max),nvarchar(max)和varbinary(max)統稱爲大值數據類型。您可以使用大數值數據類型 來存儲最多2^31-1個字節的數據。
見this article TechNet上的有關使用使用大值數據類型
你會想基於一個TEXT或VARCHAR列之間進行選擇多久網址將被用於以及是否實際需要長度才能解除綁定。
使用VARCHAR與最大長度> = 爲micahwittman建議,如果:
- 你會使用大量的每個查詢的網址(不像TEXT列,VARCHAR處理都內嵌行存儲)
- 你很確定一個URL永遠不會超過65,535字節的行限制。
使用TEXT如果:
- 的URL真的可能打破65,535字節行限制
- 您的查詢不會一次選擇或更新一堆網址(或經常) 。這是因爲TEXT列只是內嵌一個指針,並且涉及檢索引用數據的隨機訪問會很痛苦。
這真的取決於你的使用情況(見下文),但存儲爲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縮短器。
您應該使用帶有ASCII字符編碼的VARCHAR。 URL是百分比編碼,國際域名使用punycode,所以ASCII碼足以存儲它們。這將比UTF8使用更少的空間。
VARCHAR(512) CHARACTER SET 'ascii' COLLATE 'ascii_general_ci' NOT NULL
- 1. 存儲加密字段數據的最佳數據類型
- 2. 「內容類型」的數據庫字段
- 3. 什麼是用於Sqlite數字的最佳SQL字段類型
- 4. UTF-8數據的最佳類型?
- 5. GWT + JPA的最佳ID數據類型
- 6. 集合的最佳數據類型
- 7. 類和數據庫的最佳實踐
- 8. URL的最佳列類型是什麼?
- 9. 在Postgres數據庫中的多個值的最佳類型?
- 10. 數據庫模型 - SQL - 最佳方法
- 11. Drools - 比較不涉及主數據類型的字段的最佳實踐
- 12. 使用用戶定義字段的最佳數據庫設計
- 13. 保持動態數據庫字段的最佳方式?
- 14. Trac使用的最佳數據庫類型
- 15. GAE-GWT中日期數據字段類型的最佳做法是什麼?
- 16. 加速搜索的最佳字段類型和數據使用情況如何?
- 17. cursor.description中「類型代碼」對應於數據庫字段類型
- 18. mysql字段數據類型
- 19. 什麼數據類型是一個空的數據庫字段?
- 20. MySQL中大字符串的最佳數據類型
- 21. 最佳實踐數據庫類型爲Joomla編程
- 22. 什麼是這種類型的數據的最佳數據庫設計
- 23. 將java對象存儲到Oracle數據庫的最佳數據類型
- 24. 什麼是存儲youtube id數據庫的最佳數據類型?
- 25. 什麼數據類型爲通用數據庫字段
- 26. 最佳實踐模型數據的數據庫
- 27. 用於存儲Facebook訪問令牌的最佳字段類型
- 28. PostgreSQL可以推薦最佳的字段類型嗎?
- 29. Mysql:這個非標準ID字段的最佳類型
- 30. 最佳數據庫設計
這取決於你需要什麼,索引,唯一性? – 2016-11-03 19:04:32