2013-05-13 78 views
3

如果我定義了varchar(25)並且我的字符串少於25個字符(例如12個字符),則SQL將長度爲12的char向量顯示出來,並且不會添加尾隨空格(與字符不同)。是varchar(n)節省postgresql中的內存空間?

我的問題如下:後面的事實是,SQL只顯示字符串,因爲它插入字段(或截斷長度超過最大長度),Postgresql如何存儲這種數據類型?

它是填充具有額外的字節爲:

twelvecharxx .............(長度:25)

或只是存儲12個字節?

我認爲這可能會更復雜的內部。我只需要知道maximum-length可選參數是否是禁止大字符串存儲或僅僅是性能問題的安全性(關於是否所有子序列存儲的字符串預期少於或等於25個字符)。

+0

downvoter:解釋自己 – user544262772 2013-05-13 14:55:32

+0

不是我,但是這很可能是「這是一個常見問題解答」和「這是手冊中」的組合。 – 2013-05-13 23:25:54

回答

0

根據documentation,沒有填充存儲爲varchar。但是,對於character而言。存儲字符串的長度也有一些開銷。

3

SQL定義了兩種主要字符類型:字符變化(n)和 character(n),其中n是正整數。這兩種類型都可以存儲長度不超過n個字符的字符串 。嘗試將較長的字符串存儲到這些類型的列中將導致錯誤 ,除非超出的字符都是空格,在這種情況下,字符串 將被截斷爲最大長度。 (這個有點奇怪的 異常是SQL標準所要求的。)如果要存儲的字符串 比聲明的長度短,則類型字符的值將爲 空格填充;類型字符變化的值將簡單地存儲較短的字符串。

在短字符串(最多126個字節)的存儲要求是1個字節 加上實際的串,其包括在殼體字符 的空間填充。更長的串有4個字節的開銷而不是1

最後

提示:有這三種類型之間沒有性能差異, 除了使用填充空白類型時增加的存儲大小, 以及一些額外的週期來檢查存儲到長度受限的列時的長度。雖然字符(n)在其他一些數據庫系統中具有很好的性能,但它在PostgreSQL中沒有這樣的優勢 。

here