#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()
независимо от этой проблемы.