Сравните 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
,