| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Python: Базы данных > Помогите разобраться с отображением строк из MySQL |
| Автор: SergeiIv 6.10.2010, 12:19 | ||
| В базе MySQL в табл sotrudn одна запись и в поле famili значение "Ивачев". В my.ini: [mysql] default-character-set=utf8 И схема, и таблица, и столбец имеют кодировку utf8 Вот простенькая прога в Pytone: import MySQLdb
Вот результат: ('??????',) Подставляю в my.ini [mysqld] skip-character-set-client-handshake получаю: ('\xd0\x98\xd0\xb2\xd0\xb0\xd1\x87\xd0\xb5\xd0\xb2',) Все "битвы" проиграл. Может кто поможет )? |
| Автор: pythonwin 6.10.2010, 17:21 | ||
Думаю у вас стоит winXP и тогда наверное не нужно влазить в настройки mysql, а также при выводе на консоль необходимо учитывать, что там кодировка cp866 |
| Автор: SergeiIv 8.10.2010, 07:39 | ||||
| Победил проблему так: import MySQLdb
результат:
Конечно это искусственное решение проблемы, хотя сама проблема осталось и как решать её пока не знаю. Хочу ещё заметить, что вся эта бодяга действительно по WinXP. |
| Автор: SergeiIv 8.10.2010, 08:45 | ||||
Но вот ещё какая тут вариация получилась ))):
результат:
Т.е. при печать кортежа print кодировка определяется не понятно, а при извлечении элемента кортежа всё нормально. Почему так, пока вопрос. |
| Автор: av0000 8.10.2010, 10:07 | ||||||
| Бли-и-ин! Ну видно же, что возвращается, как и полагается, utf-8. print для кортежей, списков итп "использует" repr, который не знает про кодировки и потому печатает байты. Хочется строки -
склеить через пробел, "заодно" можно конвертнуть в unicode. Вероятно первой-второй строке файла должно быть указание на кодировку самого .py файла -
не помню в каких именно случаях автоконверт в unicode "падает" без явного указания кодировки. Можно ещё сконвертить и после склейки -
|
| Автор: av0000 8.10.2010, 14:41 | ||||||
Вот этих нюансов я и не помню Лечится указанием правильной кодировки консоли. Я знаю 2 способа. Второй подлиннее и нет под рукой примера, а первый - вот:
А вот тут уже надо "копать" настройки mysql-а. Т.е. если запретить мускулу перекодировку - он честно отдаёт utf-8. Я с ним дела не имею, но могу посоветовать поискать решение в мануалах по настройке django - где-то там такое попадалось. Да, кстати, есть вероятность, что после указания sys.setdefaultencoding заработает и это... Что-то мне подсказывает, что он не может определить в какой кодировке отдавать данные и по-умолчанию их честно конвертит в вопросики. |
| Автор: SergeiIv 11.10.2010, 11:14 |
| av0000 спасибо. Вышеуказанный пример работает, но только с выставленным skip-character-set-client-handshake в My.ini. |
| Автор: 22novimir 28.1.2013, 12:57 |
| А у меня такой вот вопрос по базам. Залила на хостинг базу вроде раньше под ПХП работала супер и не кривлялась. А вот стала выборку писать на Питоне одни знаки вопроса. Что же случилось и где че прописать? В ПХП знаю, нужно прописать перед подключением к базе кое что по смене кодировки. А как в Питоне это реализовать? Спасибо! |
| Автор: lplsura 9.2.2013, 13:29 |
| А интересно как вы базу из ПХП к Питону прикрутили:))) Вероятно у вас что то с кодировкой на сервере, напишите хостеру пусть сменит кодировку базы и все будет пучком. Некоторые хостеры разрешают это делать самому, а у некоторых нет. Можно и на лету менять кодировку, но это грузилово для сервера:)) Это для вас 22novimir!! |