Задать вопрос
@bahanov

Pymssql + mssql + кириллица — проблемы с кодировкой?

Добрый день.

При подключении к ms sql с помощью pymssql с такой строкой подключения
cnxn = pymssql.connect(host=server, database=database, user=username, password=password, charset='cp1251')

поля с кириллицей нормально отображаются.
Но при передаче в запросе кириллических символов в SQL-сервер попадают крякозябры.
update tbl set fio = 'Иванов Иван Иванович' # результат Eaaiia Eaai Eaaiiae?

Нормальная запись идет только при charset='utf8'.
Как это победить? Анализировать запрос и использовать разные подключения для запросов, содержащих кириллицу? Но это какой-то костыль.
  • Вопрос задан
  • 366 просмотров
Подписаться 1 Простой 1 комментарий
Пригласить эксперта
Ответы на вопрос 2
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Ну, раз подключение в cp1251, то и данные надо передавать в этой же кодировке, а не в utf-8.
update tbl set fio = 'Иванов Иван Иванович'.encode('cp1251')
Естественно, в тексте не должно быть символов, не отображающихся в cp1251, например эмодзи.
Ответ написан
@cyberdemon666
у pymssql есть проблемы с русской кодировкой(а может и с остальными), особенно хорошо это видно на эксепшионах, они в виде байтов возвращаются.
попробуйте в запрос передавать так: ... set fio = N'Иванов Иван Иванович' ...
вариант - сделать параметризованный запрос
другой вариант - перейти на pyodbc, там такой проблемы нет, и intelliscence нормально работает
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы