2015-11-18 2 views
1

У меня есть пользовательский ввод, в utf8, очень длинный. Я хотел бы поместить его в mysql, запустив его. Итак:кодирование в zlib и вставка в mysql

value = value.decode('utf8', 'replace') 
value = value.encode('zlib') 
cursor.execute('''INSERT INTO data (data_id, value) VALUES (%s,%s)''', (data_id, value ,)) 

Что бы я делать (значение = Обл (значение), значение = value.decode ...), она не работает ..

Примеры кода ошибки:

'ascii' codec can't encode character u'\xe9' in position 8177: ordinal not in range(128) 
'ascii' codec can't encode character u'\xe9' in position 747: ordinal not in range(128)'ascii' codec can't encode character u'\xe9' in position 2478: ordinal not in range(128) 

Я попытался сменить структуру поля: longtext, longbinary, blob, ... Ничего.

Ответ?

+0

Вам нужно сбежать и процитировать замену, а не просто использовать% s. –

ответ

1

Выход value.encode('zlib') будет бинарным, что не обязательно верно UTF-8 (т. Е. Почти никогда).

Я хотел бы сделать это:

value = value.encode('zlib').encode('base64') 

Это даст вам длинный ASCII строку, которая может быть безопасно включен в вашем SQL запросе.

+0

Точно то, что я хочу! Большое спасибо ! – Anonymus