子非鱼,安知鱼之乐?

我的程序人生,累并快乐着。
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

又改了一次Django的源代码

Posted on 2007-01-12 10:15  Jason Cui  阅读(873)  评论(4编辑  收藏  举报

昨天郁闷了一个晚上,今天早上终于灵光闪现,把问题解决了。

在一个页面上需要给用户提供搜索功能,本来用dbi里面的contains方式就挺好用的,而且中文支持也没有问题。后来因为这个页面是分页的,因此用户提出想要一个汇总数据,于是加上一条自定义的SQL汇总语句,结果,这个语句里面的like '%%'始终就是过不去。要么提示参数不足,要么提示解码错误,说什么ascii编码无法处理特殊字符。

改来改去,试了N多次,都没有解决问题。我觉得自己构造的SQL应该没有问题啊,后来发现,问题很可能出现在那个cursor.execute里面。于是根据错误提示,来到django的代码里,/site-packages/Django-0.95-py2.5.egg/django/db/backends/util.py,给页面的顶部加上#coding=utf-8,OK,错误提示变了,跳到了MySqldb里去。于是再改/site-packages/MySQLdb/cursors.py,给它也加上#coding=utf-8,结果还是不对,仍然提示ascii编码转换错误。

根据错误提示,在这个文件的147行,有一句对查询进行编码的动作,它的编码标准是

# charset = db.character_set_name()
# query = query.encode(charset)

按理说db拿到的编码应该是utf8的,不知道为什么总是会得到ascii编码,导致编码错误,于是将这两行注释掉,查询终于可以通过了。还不知道会不会有什么负作用。


4月24日修正:安装了Django 0.96和Mysqldb1.2.2以后,这个问题好像不存在了。