Evgenii Legotckoi
04 червня 2017 р. 14:52

Виправлення клієнтського кодування бази даних PostgreSQL з LATIN1 на UTF8

На сайті був один баг, який виявлявся при спробі прикріплення до повідомлень файлів, назви яких були на кирилиці. В даному випадку сайт видавав помилку 503. Це відбувалося незважаючи на те, що кодування бази даних було в UTF8 після виправлення кодування самої бази даних в попередній статті . Тоді як Django видавав таке повідомлення:

'latin-1' codec can't encode characters in position 55-64: ordinal not in range(256)

Проблема полягала в тому, що кодування сервера спочатку було виставлено в LATIN1. Тобто наступні команди давали наступний висновок:

postgres=# show server_encoding;
 server_encoding 
-----------------
 LATIN1
(1 row)

postgres=# show client_encoding;
 client_encoding 
-----------------
 LATIN1
(1 row)

postgres=# \encoding 
 LATIN1

Виконання команди SET CLIENT_ENCODING TO 'utf8'; не давало результату, після виходу з psql кодування поверталося до LATIN1 .


Виправлення

Виправлення цього бага звелося до настроювання кодування сервера. Оскільки в першу чергу сервер російськомовний, то для виправлення було проведено встановлення російськомовних пакетів локалей.

sudo apt-get install language-pack-ru

Виконання процесу русифікації

sudo update-locale LANG=ru_RU.UTF-8

І перезавантаження сервера

sudo reboot

Після цього кодування клієнта сервера стало UTF8

postgres=# show server_encoding;
 server_encoding 
-----------------
 LATIN1
(1 row)

postgres=# show client_encoding;
 client_encoding 
-----------------
 UTF8
(1 row)

postgres=# \encoding 
 UTF8

Цього виявилося достатньо виправлення бага.

Вам це подобається? Поділіться в соціальних мережах!

Коментарі

Only authorized users can post comments.
Please, Log in or Sign up