Mysql 在Django 1.7.8中添加blank=True字符字段时,迁移SQL无效

Mysql 在Django 1.7.8中添加blank=True字符字段时,迁移SQL无效,mysql,django,django-migrations,Mysql,Django,Django Migrations,我正在向我的一个模型添加一个not nullCharField: channel_class = models.CharField(max_length=10, blank=True) 我使用以下方法创建迁移: django-admin.py makemigrations webapp 它不询问有关默认值的任何信息(请参阅关于提示blank=True)的默认值) 为此迁移生成的SQL为: $ django-admin.py sqlmigrate webapp 0003_auto_201505

我正在向我的一个模型添加一个not null
CharField

channel_class = models.CharField(max_length=10, blank=True)
我使用以下方法创建迁移:

django-admin.py makemigrations webapp
它不询问有关默认值的任何信息(请参阅关于提示
blank=True
)的默认值)

为此迁移生成的SQL为:

$ django-admin.py sqlmigrate webapp 0003_auto_20150514_1112
BEGIN;
ALTER TABLE `webapp_lead` ADD COLUMN `channel_class` varchar(10) DEFAULT  NOT NULL;                                                                                                                                                                                            
ALTER TABLE `webapp_lead` ALTER COLUMN `channel_class` DROP DEFAULT; 
COMMIT;
但是,如果我在MySQL编辑器中插入该行,则会出现错误:

mysql> ALTER TABLE `webapp_lead` ADD COLUMN `channel_class` varchar(10) DEFAULT  NOT NULL;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'NOT NULL' at line 1
如果我使用:

mysql> ALTER TABLE `webapp_lead` ADD COLUMN `channel_class` varchar(10) DEFAULT '' NOT NULL;
例如,如果我指定一个空字符串作为默认值

我的猜测是,修复程序引入了一个新的bug?

这是django的一个bug。 在
django.db.backends.base.schema.BaseDatabaseSchemaEditor#execute
中,当存储收集的SQL
self.collected\u SQL
时,空字符串以错误的方式传递给格式化字符串,因此生成的SQL没有
'