postgresql 12 函数奇怪的值/长度行为

postgresql 12 function strange value / length behaviour

我在 table test 中有一个名为 achar(13) 列。

我使用以下行创建了一个经典的 before insert 函数:

raise notice 'a: -->%<-- len = %', new.a, length(new.a);

当我 运行 insert into test (a) values('1'); 时,我得到以下输出:

a: -->1            <-- len = 1

奇怪,没有?

不,一点都不奇怪。 char 是一个空白填充数据类型。因此,如果您将 '1' 分配给您的列,它实际上存储为 '1 '.

解决方法很简单:don't use char(n)