首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django pyodbc Latin1_General_CI_AI编码

Django pyodbc Latin1_General_CI_AI编码
EN

Stack Overflow用户
提问于 2014-07-26 01:54:51
回答 1查看 495关注 0票数 0

我有一个使用pyodbc的django应用程序来与Latin1_General_CI_AI编码的MS SQL Server数据库交谈。(我无法控制此数据库,也无法更改编码。)

问题是,来自Django -> pyodbc的每个字符串都必须编码:

例如:

代码语言:javascript
复制
m = MyModel()
m.foo = 'foo' # Garbage characters are saved
m.foo = 'foo'.encode('latin1') # String is saved correctly
m.save()

第二个问题是查询字符串也需要编码:

代码语言:javascript
复制
MyModel.objects.get(name=name) # fails
MyModel.objects.get(name=name.encode('latin1')) # works

有没有更通用的方法来处理这个问题?是Model mixin还是DB后端?我在姜戈的SQLCompiler中看到了一些地方,但不确定如何影响它。

EN

回答 1

Stack Overflow用户

发布于 2014-12-12 05:41:40

我正在经历类似的事情,并且有一个类似的变通方法。

对我来说,添加连接参数ClientCharset=utf8解决了这个问题。如果像我一样使用django-pyodbc,这意味着在数据库配置设置中添加:'OPTIONS': { 'extra_params': 'ClientCharset=utf8', }。如果您直接使用pyodbc,那么您可以将其添加到您的连接字符串中。

这里的诀窍(据我所知)是,您的TDS驱动程序已经在尝试将源数据库转换为适当的默认编码,以便您的客户端读取。因为我们在这里讨论的是微软,所以一个合适的默认值是ISO 8859-1 (我不记得这是不是确切的拉丁文-1,或者只是太接近了以至于人们不太容易注意到区别)。这就是你的变通方法起作用的原因。有关详细信息,请参阅here

Django期望数据库是talking utf-8的,所以我们在这里要做的就是告诉TDS驱动程序我们想要听到的信息。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24961773

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档