4
A
回答
6
這取決於在特定列中存儲大量數據是否合理。
如果聲明永遠不會正確地儲存大量數據的列(即僱員的名字爲VARCHAR(1000)),你最終得到的各種問題
- 許多,如果不是大多數客戶端API (即ODBC驅動程序,JDBC驅動程序等)在客戶端上分配足夠大的內存緩衝區以存儲特定列的最大大小。因此,即使數據庫只需要存儲實際數據,您也可能會顯着增加客戶端應用程序使用的內存量。
- 您從表定義中失去驅動數據驗證規則(或傳遞有關數據的信息)的能力。如果數據庫允許使用1000個字符的名字,那麼與數據庫交互的每個應用程序可能最終都會有自己的規則來規定員工姓名的大小。如果這不是通過在所有應用程序和表之間放置存儲過程層來緩解的,則這通常會導致各種應用程序擁有各種規則。
- 墨菲法則規定,如果允許1000個字符,某人最終將在該列中存儲1000個字符,或者至少有一個值足以導致一個或多個應用程序出錯(即沒有人檢查每個應用程序的員工姓名字段可顯示1000個字符)。
0
您可以將破壞你的應用程序的風險,如果一個大的數據得到了在以某種方式(如從外部接口)和您的應用程序不是設計來處理它。
作爲一個好的設計,您應該始終將字段的大小限制在一個現實的值。
4
取決於RDBMS。 IIRC,MySql爲varchar> 255個字符分配2字節開銷(以跟蹤varchar長度)。 MSSQL < = 2000將允許您分配大於8060字節的行大小,但如果您試圖插入或更新實際超過8060字節的行,則會失敗。 SQL 2005 [1]允許插入,但會爲溢出分配一個新頁面,並留下一個指針。顯然,這會影響性能。
varchar(max)有些特殊情況,但如果字段的長度大於8000或行大於8060,也會分配溢出頁面。這是MSSQL默認值,行爲可能會更改與數據行選項中的大類型。
相關問題
- 1. 按SQL Server中的varbinary(MAX)或varchar(MAX)
- 2. 將varchar(max)轉換爲varbinary(max)
- 3. 很慢VARBINARY(MAX)選擇
- 4. 將圖像存儲爲base64string(varchar(max))或varbinary
- 5. 爲VARCHAR列選擇最大值 - MySQL
- 6. 選擇任意值爲max
- 7. 選擇MAX值
- 8. 選擇MySQL中varchar的最大值
- 9. 在選擇語句中將Varbinary轉換爲Varchar
- 10. 使用VARCHAR(max),NVARCHAR(max)和VARBINARY(max)代替TEXT,NTEXT和IMAGE有什麼好處?
- 11. 爲什麼VARBINARY而非VARCHAR
- 12. Varbinary(max)圖片
- 13. HttpPostedFileBase varbinary(max)
- 14. SQL Server VARBINARY(MAX)
- 15. mysql varbinary vs varchar
- 16. VarChar的最大行大小(MAX)
- 17. 堅持使用TEXT,NTEXT和IMAGE代替(N)VARCHAR(max)和VARBINARY(max)的原因
- 18. 如何提取varbinary(max)列的值?
- 19. varbinary或varchar保存AES加密數據
- 20. Varchar(255)到Varchar(MAX)
- 21. 是否varchar(max)= varchar?
- 22. 在表中使用VARCHAR(MAX)有缺點嗎?
- 23. cast varbinary(8)/ timestamp column to varchar(max)獲取空字符串?
- 24. 錯誤轉化爲varchar(最大值)時,整數或浮點數
- 25. 使用varchar(MAX)或varbinary(MAX)在SQL Server中存儲長度未定義的字符串
- 26. 從表中選擇最大值(列)(列爲varchar)
- 27. SQLite的VARCHAR缺省大小
- 28. 選擇MAX值誤差
- 29. 選擇第二個MAX值
- 30. NHibernate:同時選擇MAX值