поведение функции postgresql 12 со странным значением / длиной

#sqldatatypes #postgresql-12

#типы sqldatatypes #postgresql-12

Вопрос:

У меня есть char(13) столбец с именем a в таблице test .

Я создал классическую функцию before insert со следующей строкой :

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

Когда я запускаю insert into test (a) values('1'); , я получаю следующий вывод :

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

Странно, нет?

Ответ №1:

Нет, совсем не странно. char является пустым дополненным типом данных. Таким образом, если вы присваиваете '1' своему столбцу, он фактически сохраняется как '1 ' .

Решение простое: не используйте char (n)

Комментарии:

1. на самом деле значение еще не присвоено, потому что мы находимся в триггерной функции BEFORE INSERT, не так ли?

2. Оно присваивается полю в вставляемой записи. Просто не используйте char() независимо от этой проблемы.