Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Python: Общие вопросы > Как сохранить в БД json-кодированную строку ?


Автор: HongKilDong 3.5.2013, 13:42
В результате распарсивания json имеем json-кодированное представление строки из кириллических символов, например: 
Код

u'\u0417\u0430\u0449\u0438\u0442\u0430'


При попытке вставки в MySQL базу c кодировкой utf-8, используя библиотеку MySQLdb:
Код

cur.execute("INSERT INTO tst (tst) VALUES (%s)", u'\u0417\u0430\u0449\u0438\u0442\u0430'.encode('utf_8'))


Имеем в базе абракадабру
Код

Защита


При извлечении из базы тем же MySQLdb результат не лучше:

Код

cur.execute("SELECT * FROM tst")
row = cur.fetchone()
print row[0]

Код

Защита


Подскажите, как получить в базе нормальное кириллическое представление строки ?

Автор: Arantir 3.5.2013, 14:21
Цитата(HongKilDong @  3.5.2013,  12:42 Найти цитируемый пост)
Имеем в базе абракадабру

Записано в UTF-8, а прочтено как windows-1252

Цитата(HongKilDong @  3.5.2013,  12:42 Найти цитируемый пост)
При извлечении из базы тем же MySQLdb результат не лучше:

Записано в UTF-8, а прочтено как windows-1251

Настройте кодировки везде одинаковые.
Данные в самой базе в полном порядке, вы просто в неправильной кодировке их читаете.

Автор: HongKilDong 3.5.2013, 14:58
Абракадабра в базе была при просмотре клиентами в кодировке UTF-8, смотрел 2 разными клиентами, получается записано было в базу всё таки не в UTF-8, похоже python передавал MySQLdb текст в UTF-8, а MySQLdb всё равно писал в базу в своей кодировке. 

Вообщем стал писать в базу так: 
Код

cur.execute("SET NAMES UTF8")
cur.execute("INSERT INTO tst (tst) VALUES (%s)", unicode_str.encode('utf-8'))


В базе всё отображается нормально, но с MySQLdb про прежнему траблы, если читать в рамках того же подключения в котором была записть (и SET NAMES UTF8) то на выходе имеем пере-utf8-кодированный текст, если читать в "чистом" подключении, без SET NAMES UTF8 то всё нормально.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)