2011-12-22 106 views
5

如果要存儲的XML文檔始終小於64 KiB(即AFAIK,VARCHAR的限制),那麼可以使用VARCHAR和TEXT列類型的優缺點來完成此任務嗎?使用VARCHAR與TEXT在MySQL中存儲小型XML文檔有什麼優缺點?

+2

與MySQL無法合作,但TEXT數據類型已經在SQL Server中變得過時了,並且支持VARCHAR(MAX)。 TEXT數據類型的一些缺點,它不能被索引,它被存儲在頁面外,並且不能用LIKE條件搜索。 – 2011-12-22 23:38:31

+0

你確定「陳舊」@lieven?是不是有比VARCHAR更適合的情況?在我的特殊情況下,我將設置文本一次並偶爾使用它(通過單獨的無連接查詢以更簡單的鍵查找字段),可能既不需要更新也不需要分析它。 – Ivan 2011-12-22 23:51:38

+1

請注意,我正在專門討論'SQL Server',但我會想象* MySQL有一天會走相同的路線。不要把它當作一攬子建議,我很好奇社區對此有什麼看法,並希望有專業知識的人可以參加。 – 2011-12-22 23:54:17

回答

2

以下摘錄摘自與​​有關的MySQL文檔。 「

」一個可變長度字符串,M表示字符的最大列長度,M的範圍是0到65,535,VARCHAR的有效最大長度取決於最大行大小(65,535字節,它是共享的例如,utf8字符每個字符最多需要三個字節,所以使用utf8字符集的VARCHAR列最多可以聲明爲21,844個字符,參見E.10.4節,「表列數和行大小限制」

MySQL將VARCHAR值存儲爲一個字節或兩個字節長度的前綴加數據,長度前綴表示該值中的字節數VARCHAR列如果值不超過255個字節則使用一個長度字節,如果是v則使用兩個長度字節線索可能需要超過255個字節。「

TEXT摘錄:

「一文柱,以65535(216 - 1)的最大長度的字符的有效最大長度小於如果值包含多字節字符每個文本值被存儲。使用一個長度爲2字節的前綴表示數值中的字節數

可以給這個類型一個可選的長度M如果這樣做了,MySQL創建列作爲最小的TEXT類型足夠大以容納值M個字符長。「

似乎text和varchar在表面上是相同的,因爲它們具有相同的字符串存儲容量,但經過一些進一步的研究後,我遇到了以下thread,這表明MySQL處理兩個列的方式不同在處理索引和創建臨時表時,這兩者都會影響查詢性能。

如果您不打算對存儲的數據進行任何查詢,我建議您考慮一下NoSQL解決方案,如MongoDB

相關問題