參考關於Character Types的Postgres文檔,我不清楚指定字符變化(varchar)類型的長度。爲什麼指定字符變化類型的長度
假設:
- 字符串的長度,不要緊的應用。
- 你不在乎別人把數據庫中的最大尺寸
- 你有無限的硬盤空間
它確實提到:
的短字符串的存儲需求(最多126字節)爲1字節 加上實際字符串,其中包括字符 的空格填充。較長的字符串具有4字節的開銷而不是1. 長字符串被系統自動壓縮,因此磁盤上的物理需求可能會更少。非常長的值也存儲在背景表中,因此它們不會影響對較短列值的快速訪問。無論如何,可以存儲的最長可能的 字符串大約爲1 GB。 (在數據類型聲明中允許爲n的最大值爲 小於 那麼改變它是沒有用的,因爲使用多字節 字符編碼的字符數和字節數可以相當 不同
這談論串的大小,而不是字段的大小(即聽起來像它會永遠壓縮在一個大的varchar字段一個大的字符串,而不是在一個大的varchar字段小弦?)
我問這個問題,因爲它會更容易(和懶惰)指定一個更大的大小,所以你永遠不必擔心有一個字符串太l ARGE。例如,如果我爲地名指定varchar(50),我將獲得具有更多字符的位置(例如Llanfairpwllgwyngyllgogerychwyrndrobwllllantysiliogogogoch),但是如果指定varchar(100)或varchar(500),我不太願意得到該問題。
如果你最大的字符串是400字符長,那麼你會在varchar(500)和(任意)varchar(5000000)或text()之間得到性能命中嗎?
如果任何人有答案,並且知道其他數據庫的答案,請加上。
我已經使用了Google,但沒有找到足夠的技術性解釋。
與使用'varchar(nn)'相比,使用'text'(或'varchar')以及限制長度的檢查約束更靈活一些。改變長度限制就像刪除和重新創建檢查約束一樣簡單,而一個ALTER TABLE可以擴展例如varchar(20)到varchar(50)在大型表上非常耗時,並在該表上放置排他鎖。 –
偉大的鏈接...! –