У меня есть база данных (mysql), где я хочу хранить маринованные данные.
Данные могут быть, например, словарем, который может содержать unicode, например
data = {1 : u'é'}
а база данных (mysql) находится в utf-8.
Когда я мариную,
import pickle
pickled_data = pickle.dumps(data)
print type(pickled_data) # returns <type 'str'>
результат pickled_data - это строка.
Когда я пытаюсь сохранить это в базе данных (например, в текстовом поле), это может вызвать проблемы. В частности, я получаю в какой-то момент
UnicodeDecodeError "'utf8' codec can't decode byte 0xe9 in position X"
при попытке сохранить pickled_data в базе данных. Это имеет смысл, потому что pickled_data может иметь символы не-utf-8. Мой вопрос: как хранить pickled_data в базе данных utf-8?
Я вижу двух возможных кандидатов:
-
Кодировать результат pickle.dump на utf-8 и хранить его. Когда я хочу pickle.load, я должен его декодировать.
-
Хранить маринованную строку в двоичном формате (как?), что заставляет все символы находиться в пределах ascii.
Моя проблема в том, что я не вижу, каковы последствия выбора одного из этих вариантов в долгосрочной перспективе. Поскольку изменение уже требует определенных усилий, я вынужден спросить мнение по этому вопросу, попросив возможных лучших кандидатов.
(P.S.Это, например, полезно в Django)