|
Модераторы: Daevaorn |
|
SergeiIv |
|
|||
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 30.8.2010 Репутация: 1 Всего: 1 |
В базе 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',) Все "битвы" проиграл. Может кто поможет )? Это сообщение отредактировал(а) Daevaorn - 6.10.2010, 12:35 |
|||
|
||||
pythonwin |
|
|||
Эксперт Профиль Группа: Участник Сообщений: 2529 Регистрация: 18.4.2006 Где: за компом Репутация: нет Всего: 36 |
Думаю у вас стоит winXP и тогда наверное не нужно влазить в настройки mysql, а также при выводе на консоль необходимо учитывать, что там кодировка cp866 |
|||
|
||||
SergeiIv |
|
||||
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 30.8.2010 Репутация: 1 Всего: 1 |
Победил проблему так:
import MySQLdb
результат:
Конечно это искусственное решение проблемы, хотя сама проблема осталось и как решать её пока не знаю. Хочу ещё заметить, что вся эта бодяга действительно по WinXP. |
||||
|
|||||
SergeiIv |
|
||||
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 30.8.2010 Репутация: 1 Всего: 1 |
Но вот ещё какая тут вариация получилась ))):
результат:
Т.е. при печать кортежа print кодировка определяется не понятно, а при извлечении элемента кортежа всё нормально. Почему так, пока вопрос. |
||||
|
|||||
av0000 |
|
||||||
Новичок Профиль Группа: Участник Сообщений: 26 Регистрация: 11.2.2009 Репутация: 1 Всего: 2 |
Бли-и-ин!
Ну видно же, что возвращается, как и полагается, utf-8. print для кортежей, списков итп "использует" repr, который не знает про кодировки и потому печатает байты. Хочется строки -
склеить через пробел, "заодно" можно конвертнуть в unicode. Вероятно первой-второй строке файла должно быть указание на кодировку самого .py файла -
не помню в каких именно случаях автоконверт в unicode "падает" без явного указания кодировки. Можно ещё сконвертить и после склейки -
|
||||||
|
|||||||
SergeiIv |
|
|||
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 30.8.2010 Репутация: 1 Всего: 1 |
это всё объясняет. Спасибо av0000. Кстати print u' '.join(i) # или print u'%s %s' % i выдает ошибку: UnicodeDecodeError: 'ascii' codec can't decode byte 0xd0 in position 0: ordinal not in range(128) File "d:\PFiles\wxPython2.8 Docs and Demos\untitled-1.py", line 11, in <module> print u'%s %s' % i а: print i[0]+' '+i[1] print unicode(' '.join(i), 'utf-8') сработало правильно (и то и то) но всё это только при наличии опции skip-character-set-client-handshake в My.ini |
|||
|
||||
av0000 |
|
||||||
Новичок Профиль Группа: Участник Сообщений: 26 Регистрация: 11.2.2009 Репутация: 1 Всего: 2 |
Вот этих нюансов я и не помню . Это последствия неправильной дефолтной кодовой страницы. Проявляется, в основном, под виндой. Лечится указанием правильной кодировки консоли. Я знаю 2 способа. Второй подлиннее и нет под рукой примера, а первый - вот:
А вот тут уже надо "копать" настройки mysql-а. Т.е. если запретить мускулу перекодировку - он честно отдаёт utf-8. Я с ним дела не имею, но могу посоветовать поискать решение в мануалах по настройке django - где-то там такое попадалось. Да, кстати, есть вероятность, что после указания sys.setdefaultencoding заработает и это... Что-то мне подсказывает, что он не может определить в какой кодировке отдавать данные и по-умолчанию их честно конвертит в вопросики. |
||||||
|
|||||||
SergeiIv |
|
|||
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 30.8.2010 Репутация: 1 Всего: 1 |
av0000 спасибо.
Вышеуказанный пример работает, но только с выставленным skip-character-set-client-handshake в My.ini. |
|||
|
||||
22novimir |
|
|||
Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 27.1.2013 Где: Магнитогорск Репутация: нет Всего: нет |
А у меня такой вот вопрос по базам. Залила на хостинг базу вроде раньше под ПХП работала супер и не кривлялась. А вот стала выборку писать на Питоне одни знаки вопроса. Что же случилось и где че прописать? В ПХП знаю, нужно прописать перед подключением к базе кое что по смене кодировки. А как в Питоне это реализовать? Спасибо!
|
|||
|
||||
lplsura |
|
|||
Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 8.2.2013 Где: Багуслав Репутация: нет Всего: нет |
А интересно как вы базу из ПХП к Питону прикрутили:))) Вероятно у вас что то с кодировкой на сервере, напишите хостеру пусть сменит кодировку базы и все будет пучком. Некоторые хостеры разрешают это делать самому, а у некоторых нет. Можно и на лету менять кодировку, но это грузилово для сервера:)) Это для вас 22novimir!!
|
|||
|
||||
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Python: Базы данных | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |