postgresql 12 函数奇怪的值/长度行为
postgresql 12 function strange value / length behaviour
我在 table test
中有一个名为 a
的 char(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)
我在 table test
中有一个名为 a
的 char(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)