database - PostgreSQL 中的 CHAR 有 2 种可能的长度

标签 database postgresql

假设我有一个属性将包含一些文本,并且可以是 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/

相关文章:

c# - 处理日期和时间跨度的好方法?

postgresql 9.1.3 : "operator not unique" issues

sql - Postgres : select query with group by clause on a range of dates

postgresql - 从 Postgres 链接到 Access 2010 的表上的字段不会成为备忘录?

ruby-on-rails - Rails Postgre 日期时间保存为零

sql-server - 如何向现有的 Visual Studio 数据库项目添加新架构?

mysql - 在子查询中使用表别名与 where 子句对齐

Mysql 模式不断删除表而不采取任何操作

swift - 如何检查表计数并在 swift iOS 的 if 语句中使用它

sql - PostgreSQL LEFT JOIN 无法正常工作