Django admin 更新记录时崩溃,但插入新记录正常
我遇到了一个奇怪的问题:
这是我的技术信息,开发环境是这样的(生产环境会用linux/apache/Mysql):
macosx 2.6.6
python 2.6.1
django 1.3
mysql 5.1
我用MySQLdb来连接python和MySQL……
我刚接触django,大家从我之前的问题就能看出来……但我需要快速掌握它,因为我需要用它开发一个大型系统。
现在的问题是,对我来说,学习的过程并不是那么顺利……
好吧,进入正题。我正在做django的教程(不是为了好玩,我真的需要快速学习,因为我需要用它开发一个庞大的系统)。
到目前为止,我完成了所有的教程,正好到了添加管理员的阶段。
当我尝试编辑投票记录时(如果有人知道django 1.3的教程),网站崩溃了,出现了以下异常:
警告在 /admin/polls/poll/2/ 字符串值不正确:'\xD7\xA9\xD7\x95\xD7\xA0...',在第1行的'change_message'列
在同一张表中添加新记录没有问题,只是编辑时出错……
如果有人知道这方面的事情……
# Create your models here.
class Poll(models.Model): question = models.CharField(max_length=200) pub_date = models.DateTimeField('发布日期')
def __unicode__(self):
return self.question
def was_published_today(self):
return self.pub_date.date() == datetime.date.today()
这是我的模型,另外我看到我的MySQL数据库是latin1而不是UTF-8……python是unicode……也许这就是问题所在……
但我还是搞不明白为什么我可以添加记录却不能编辑它们……这不是很奇怪吗?
4 个回答
打开你的mysql命令行工具,然后运行下面的命令:
mysql> show variables like 'character\_set\_%';
上面有没有出现utf8
的值呢?
如果你觉得这是mysql的问题,可以把你的数据库设置换成sqlite3:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': 'database.sqlite3',
'USER': '',
'PASSWORD': '',
'HOST': '',
'PORT': '',
}
}
同步一下,然后再试着输入一些数据。
我之前也遇到过同样的问题,不过我是用的Django 1.4版本。我参考了photoionized的建议,但做了一些调整以适应这个版本(在这个版本中,auth_message
不见了,但你可以在django_admin_log
中找到change_message
)。所以:
ALTER TABLE django_admin_log CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
听起来像是数据库的字符集问题。你能检查一下你数据库中auth_message表的默认字符集吗?
如果你的表不能处理utf8字符,就会出现这个错误。