Mysql 在Django 1.7.8中添加blank=True字符字段时,迁移SQL无效
我正在向我的一个模型添加一个not nullMysql 在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
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
中,当存储收集的SQLself.collected\u SQL
时,空字符串以错误的方式传递给格式化字符串,因此生成的SQL没有'