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

Started by Mattias Kregertabout 20 years ago2 messagesbugs
Jump to latest
#1Mattias Kregert
mattias@kregert.se

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 ...

#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: Mattias Kregert (#1)
Re: BUG #2319: psql utf8/latin1 client_encoding bug when using '-c'

"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