Postgresql
我應該向 VARCHAR 列添加任意長度限制嗎?
根據PostgreSQL 的文件,
VARCHAR
,VARCHAR(n)
和TEXT
.我應該向名稱或地址列添加任意長度限制嗎?
**編輯:**不是欺騙:
我知道這種
CHAR
類型是過去的遺物,我不僅對性能感興趣,而且對其他優點和缺點感興趣,比如 Erwin 在他驚人的回答中所說的。
答案是否定的。
varchar
如果不需要,請不要添加長度修飾符。(大多數時候,你不會。)只text
用於所有字元數據。varchar
如果您需要與沒有text
通用字元串類型的 RDBMS 保持兼容,請使其(標準 SQL 類型)不帶長度修飾符。性能幾乎相同,在
text
極少數情況下會更快一些,並且您可以保存週期以檢查長度。有關的:如果您確實需要強制執行最大長度,
varchar(n)
這是一個有效的選擇,但我仍然會考慮text
使用如下CHECK
約束:ALTER TABLE tbl ADD CONSTRAINT tbl_col_len CHECK (length(col) < 51);
您可以隨時修改或刪除此類約束,而不必弄亂表定義和依賴對象(視圖、函式、外鍵……)。您可以在(相同)約束中強制執行其他要求。
長度修飾符用於導致像這樣或這樣或這樣的問題……
PostgreSQL 9.1 引入了一個新特性來減輕痛苦。發行說明:
允許
ALTER TABLE ... SET DATA TYPE
在適當的情況下避免表重寫 (Noah Misch, Robert Haas)例如,將
varchar
列轉換為文本不再需要重寫表。但是,增加列的長度約束varchar
仍然需要重寫表。更多問題
varchar(n)
已在以後的版本中得到修復。