假设我有一个属性将包含一些文本,并且可以是 10 个字符的固定大小或 20 个字符的固定大小,但不能包含任何其他长度的文本。
我可以使用 VARCHAR(20)
来为这两种情况保存文本,但这将允许在我的关系中保存不同长度的字符串,例如15 个字符的字符串。
PostgreSQL 中是否有类似于 CHAR(10) OR CHAR(20)
的类型,或者我是否必须实现自己的约束?
最佳答案
使用检查约束:
create table foo
(
some_code varchar not null,
constraint check_length check (length(some_code) in (10,20))
);
编辑
如果您想将其作为可重用的数据类型,您可以创建一个域:
create domain fixed_size_text
as text not null
constraint check_length check (length(value) in (10,20);
create table foo
(
some_code fixed_size_text
);
顺便说一句:您几乎不想将列定义为 char(n)
,因为它会被填充到定义的最大长度。因此,如果您将 'x'
存储在 char(50)
列中,您将有效地存储 x
和 49 个空格。
关于database - PostgreSQL 中的 CHAR 有 2 种可能的长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26019885/