max79
Апрель 4, 2012 08:53:29
Подскажите как работать с данными в уникодах в mysql. Что я делаю не так?
>>> import MySQLdb
>>> db=MySQLdb.connect(user=“***”, passwd=“*****”, db=“test”, use_unicode=True)
>>> a= u'test тест'
>>> db.escape_string(a)
Traceback (most recent call last):
File “<stdin>”, line 1, in <module>
UnicodeEncodeError: ‘ascii’ codec can't encode characters in position 5-8: ordinal not in range(128)
Спасибо
Felixx
Апрель 4, 2012 22:57:37
Не, я прогнал. отставить пост!)
Piton23
Апрель 5, 2012 07:55:19
База в какой кодировке?
Хотя какая разница. Посмотрев в нете, функцию экранирования больше используют к пакету а не к коннекту. Т.е. MySQLdb.escape_string(…). Ну раз он не викидывает исключения NoAttribute то хз. Модуля нет под руками чтоб протестить. Ждите что кто нить толковое подскажет )
max79
Апрель 5, 2012 12:21:01
Piton23
База в какой кодировке?
Хотя какая разница. Посмотрев в нете, функцию экранирования больше используют к пакету а не к коннекту. Т.е. MySQLdb.escape_string(…). Ну раз он не викидывает исключения NoAttribute то хз. Модуля нет под руками чтоб протестить. Ждите что кто нить толковое подскажет )
база конечно в utf8_general_ci и все поля и таблицы в utf8_general_ci
чувствую что я что-то не то делаю. ведь очевидно что если не эскейпить то где нить да проскочит кавычка или двойной минус. и все как-то с этим борятся?
вопрос как?
Piton23
Апрель 5, 2012 14:33:31
Ты попробуй пока инсертнуть в базу значения где будешь обрабатывать через MySQLdb.escape_string(a), а не через db.escape_string(a), пробуй экспериментируй. А если будет выскакивать UnicodeEncodeError то приведи здесь пример втавки значения в базу, дальше будем смотреть.
Да кстати перед escape пробуй также encode('utf-8'), т.е.
MySQLdb.escape_string(a.encode('utf-8'))
Либо жди когда более опытный даст тебе совет :)
Андрей Светлов
Апрель 5, 2012 16:35:33
escape_string желает работать с байтами. a имеет тип unicode. При преобразовании str(a) вызывается кодек по умолчанию, имя которому ascii. До собственно MySQL дело не доходит.