nixbox
@nixbox

Как исправить проблему с кодировкой (UnicodeEncodeError: 'latin-1' codec can't encode characters..) при взаимодействии с mysql?

Здравствуйте!

Проблема (как минимум) с внесением информации в БД Mysql.

Получаю ошибку:
UnicodeEncodeError: 'latin-1' codec can't encode characters in position 0-3: ordinal not in range(256)


Данные ввожу через веб-форму, не через консоль.
На локалке все было нормально, ошибка стала появляться при переносе на прод.

Кодировка БД - utf8mb4
Кодировка подключения к БД во Flask (Sqlalchemy) - utf8mb4
Версия Python 3.7.4
ОС - Ubuntu 18

Спасибо!
  • Вопрос задан
  • 22071 просмотр
Решения вопроса 1
nixbox
@nixbox Автор вопроса
Итак, проблема была не в БД и Python,
a в языке системы (VPS/Ubuntu 18)
в которой русского языка не было установлено вообще.

Проверьте кодировку системы:

import sys
import locale

print(sys.getfilesystemencoding())
print(locale.getpreferredencoding())


У меня на VPS как раз стояла ISO 8859-1 ( Latin-1 )

Решение - добавить в систему RU локаль.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@CopsisOnFire
Вчера поймал такую же ошибку на свежекупленом серваке с ubuntu 20. Запускал бота для телеги. Помогло dpkg-reconfigure locales там выбираем все EN.UTF-8 и все Ru-RU. Потом ручками прописал LANG=ru_RU.UTF и всё заработало.
Ответ написан
Комментировать
@lubezniy
В конкретном поле поставить что-то вроде COLLATE utf8_general_ci
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы