psql中character varying和character区别
| character varying(n), varchar(n) | 變長,有長度限制 |
| character(n), char(n) | 定長,不足補空白 |
| text | 變長,無長度限制 |
? ? SQL定義了兩種基本的字符類型:character varying(n)和character(n),這里的n是一個正整數(shù)。兩種類型都可以存儲最多n個字符的字符串。試圖存儲更長的字符串到這些類型的字段里會產(chǎn)生一個錯誤,除非超出長度的字符都是空白,這種情況下該字符串將被截斷為最大長度。這個看上去有點怪異的例外是SQL標(biāo)準(zhǔn)要求的。如果要存儲的字符串比聲明的長度短,類型為character的數(shù)值將會用空白填滿;而類型為character varying的數(shù)值將只是存儲短些的字符串。
? ? 如果我們明確地把一個數(shù)值轉(zhuǎn)換成character varying(n)或character(n),那么超長的數(shù)值將被截斷成n個字符,且不會拋出錯誤。這也是SQL標(biāo)準(zhǔn)的要求。
? ? varchar(n)和char(n)分別是character varying(n)和character(n)的別名,沒有聲明長度的character等于character(1);如果不帶長度說明詞使用character varying,那么該類型接受任何長度的字符串。后者是PostgreSQL的擴展。
? ? 另外,PostgreSQL提供text類型,它可以存儲任何長度的字符串。盡管類型text不是SQL標(biāo)準(zhǔn),但是許多其它SQL數(shù)據(jù)庫系統(tǒng)也有它。
? ? character類型的數(shù)值物理上都用空白填充到指定的長度n并且以這種方式存儲和顯示。不過,填充的空白在是無語意的。在比較兩個character值的時候,填充的空白都不會被關(guān)注,在轉(zhuǎn)換成其它字符串類型的時候,character值里面的空白會被刪除。請注意,在character varying和text數(shù)值里,結(jié)尾的空白是有語意的。
? ? 這些類型的存儲需求是4字節(jié)加上實際的字符串,如果是character的話再加上填充的字節(jié)。長的字符串將會自動被系統(tǒng)壓縮,因此在磁盤上的物理需求可能會更少些。長的數(shù)值也會存儲在后臺表里面,這樣它們就不會干擾對短字段值的快速訪問。不管怎樣,允許存儲的最長字符串大概是1GB。允許在數(shù)據(jù)類型聲明中出現(xiàn)的n的最大值比這還小。修改這個行為沒有什么意義,因為在多字節(jié)編碼下字符和字節(jié)的數(shù)目可能差別很大。如果你想存儲沒有特定上限的長字符串,那么使用text或沒有長度聲明詞的character varying,而不要選擇一個任意長度限制。
? ? 這三種類型之間沒有性能差別,只不過是在使用character的時候增加了存儲尺寸。雖然在某些其它的數(shù)據(jù)庫系統(tǒng)里,character(n)有一定的性能優(yōu)勢,但在PostgreSQL里沒有。在大多數(shù)情況下,應(yīng)該使用text或character varying。
總結(jié)
以上是生活随笔為你收集整理的psql中character varying和character区别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 信令承载SRB
- 下一篇: 尺度不变特征转换(Scale-invar