Сравните varchar с символом

Я пытаюсь выяснить, что делает Postgres при сравнении varchar с char,

Вот один из моих тестов:

test=# select 'a'::character varying = 'a     '::character;
?column?
----------
 t

test=# select 'ab'::character varying = 'ab     '::character;
?column?
----------
 f

Это похоже на ошибку для меня. Кто-нибудь знает, что здесь происходит? Есть хорошие документы на эту тему?

1 ответ

Решение

Не ошибка вообще.
Приведение строкового литерала 'ab ' в character, это то, что ты получаешь:

a

По документации:

character без спецификатора длины эквивалентно character(1),

'a'::character(1) затем будет принужден к varchar (character varying) проверить на равенство с 'a'::varchar или же 'ab'::varchar и дать TRUE или же FALSE соответственно.

В принципе, вряд ли есть веская причина для использования character на всех. Это устаревший тип, который изжил себя. Просто используйте text или же varchar,

Другие вопросы по тегам