代码改变世界

关于使用Django admin模块插入中文时乱码的处理方法

2013-01-31 10:32  梁小白  阅读(1226)  评论(0编辑  收藏  举报

    django的models在定义时并没有相关参数来约定数据库和表及表中字段的编码规则。

所以一般情况下,使用manager.py syncdb创建的表均为latin-1编码,这种情况,当你使用admin模块在后台插入
中文数据时,会出现乱码提示。
 
    网上通常的资料是使用sql语句将相关的需要插入中文的字段改为utf-8编码。
 
   这是一种办法,但是,当字段较多时会比较麻烦。
   (可以用phpmyadmin等图形管理工具)
 
  其实不用这么麻烦。
  出现乱码的根本原因在于,数据库创建表的本身编码不支持utf-8字符,所以从根本上将所有表和字段创建为utf-8编码才是解决方法。
   这个思路一方面期待django 后续ORM模块加入对编码的支持。
 
还有一个方面是从数据库入手,对于mysql来说,可以在其配置文件中加入
[mysqld]
init_connect='SET NAMES utf8'
来解决.
经过测试,效果良好。
 
在以前的mysql中有这个选项。
default-character-set=utf8
 
但我在ubuntu 12.04 +mysql5.5的版本中加入此项,会导致mysql无法启动.