inserts bypass encoding conversion

Поиск
Список
Период
Сортировка
От James Pang (chaolpan)
Тема inserts bypass encoding conversion
Дата
Msg-id PH0PR11MB5191EB32087DE307374EB2C4D615A@PH0PR11MB5191.namprd11.prod.outlook.com
обсуждение исходный текст
Ответы Re: inserts bypass encoding conversion  (Tom Lane <tgl@sss.pgh.pa.us>)
Список pgsql-admin

Hi,

   With client_encoding=UTF8 and server_encoding=LATIN1, looks like insert into value with chr(codepoint) bypass encoding conversion , is it expected ?  test as below ,

 

jamet=# delete from testutf8;

DELETE 1

jamet=# show client_encoding;

client_encoding

-----------------

UTF8

(1 row)

 

jamet=# show server_encoding;

server_encoding

-----------------

LATIN1

(1 row)

 

jamet=# \d testutf8

                     Table "public.testutf8"

Column |          Type          | Collation | Nullable | Default

--------+------------------------+-----------+----------+---------

test   | character varying(128) |           |          |

 

jamet=# insert into testutf8 values('…');

ERROR:  character with byte sequence 0xe2 0x80 0xa6 in encoding "UTF8" has no equivalent in encoding "LATIN1"           <<< here it’s expected to see encoding conversion error

jamet=# insert into testutf8 values(chr(226)||chr(128)||chr(166));                                                                                                 <<< here, looks like using chr(codepoint) works, it bypass encoding_conversion ?

INSERT 0 1

jamet=# set client_encoding='LATIN1';

SET

jamet=# show client_encoding;

client_encoding

-----------------

LATIN1

(1 row)

 

jamet=# show server_encoding;

server_encoding

-----------------

LATIN1

(1 row)

 

jamet=# select * from testutf8;

test

------

(1 row)

 

jamet=# insert into testutf8 values('…');                                                                               <<< here, with client and server same LATIN1, no any encoding conversion , and the data got inserted.

INSERT 0 1

jamet=# select * from testutf8;

test

------

(2 rows)

 

jamet=# select encode(test::bytea,'hex') from testutf8;                                                    <<< both show same value

 encode

--------

e280a6

e280a6

(2 rows)

В списке pgsql-admin по дате отправления:

Предыдущее
От: Stephen Frost
Дата:
Сообщение: Re: .history': No such file or directory - a symptom of ?
Следующее
От: Tom Lane
Дата:
Сообщение: Re: inserts bypass encoding conversion