parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

Лишние символы при записи данных в поле character varying PostgreSQL

AlexanderM 29.03.2010 23:49

Имеется некоторая таблица (PostgreSQL версия 8.3.1, кодировка UTF-8), в ней имеется некое поле типа character varying(60).
Используется Parser версии 3.4.0 (до недавнего времени был Parser 3.2.0 и описанной ниже проблемы не было).

При попытке записать в указанное поле (командами INSERT или UPDATE) некоторые русские слова, в поле записываются эти слова + несколько пробелов в конце.
Например, вместо «Александр» записывается «Александр », вместо «Андрей» записывается «Андрей », вместо «бизнес» записывается «бизнес » и так далее...

Однако другие русские слова (например, «Федор», «семинар», «клиенты») и слова написанные латиницей, записываются правильно.

Это ошибка в драйвере PostgreSQL или у меня руки кривые?
Поможет ли апгрейд PostgreSQL до версии 8.3.10 или до версии 8.4.3?

Если это ошибка и апгрейд PostgreSQL не поможет, то что можете посоветовать чтобы обойти эту проблему (кроме совета: откатить Parser к старой версии)?

Понятно, что при выводе на сайт удаление лишних пробелов тривиально решается с помощью метода trim[]. (Правда, тривиальность несколько блёкнет, если учесть то, что придётся просмотреть тысячи строк кода, чтобы найти все места, где такая проблема потенциально может возникнуть).

А вот что делать если для такого поля требуется в том или ином виде использовать операцию сравнения внутри PostgreSQL? Записи «Александр» и «Александр » в поле character varying - это разные значения. Операция сравнения будет давать «Александр » > «Александр», сортировка будет работать неправильно, уникальные с точки зрения базы данных значения не будет уникальными с точки зрения человека. В спешном порядке переделывать поля character varying на character? Или есть более цивилизованные решения?