Обсуждение: BUG #2319: psql utf8/latin1 client_encoding bug when using '-c'

Поиск
Список
Период
Сортировка

BUG #2319: psql utf8/latin1 client_encoding bug when using '-c'

От
"Mattias Kregert"
Дата:
The following bug has been logged online:

Bug reference:      2319
Logged by:          Mattias Kregert
Email address:      mattias@kregert.se
PostgreSQL version: 8.1.0
Operating system:   Linux 2.4
Description:        psql utf8/latin1 client_encoding bug when using '-c'
Details:

Psql '-c' does not work when using client_encoding.

Example:
Server has encoding UTF8, client has encoding latin1

-- This works...
% psql -h server mydb
mydb=# set client_encoding to 'latin1';
mydb=# select * from mytable where text='ÅÄÖ';

-- ...but this does not.
% psql -h server mydb -c "set client_encoding to 'latin1'; select * from
mytable where text='ÅÄÖ';"
ERROR:  invalid UTF-8 byte sequence detected near byte 0xc5

I tried this too, without success:
% psql --set encoding=latin1 -h server mydb ...

Re: BUG #2319: psql utf8/latin1 client_encoding bug when using '-c'

От
Tom Lane
Дата:
"Mattias Kregert" <mattias@kregert.se> writes:
> -- ...but this does not.
> % psql -h server mydb -c "set client_encoding to 'latin1'; select * from
> mytable where text='ÅÄÖ';"
> ERROR:  invalid UTF-8 byte sequence detected near byte 0xc5

There is no hope of that ever working, since the string will be read (and
converted to the server's encoding if relevant) before the SET is
executed.  Better find another way to do what you want.

            regards, tom lane