Opened 8 years ago
Last modified 8 years ago
#27456 closed Bug
Changing the unique paramater from True to False has no effect on MySQL — at Initial Version
Reported by: | Vadim | Owned by: | nobody |
---|---|---|---|
Component: | Migrations | Version: | 1.8 |
Severity: | Normal | Keywords: | mysql |
Cc: | Triage Stage: | Unreviewed | |
Has patch: | no | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description
Steps to reproduce:
- Create a model:
from django.db import models class TestModel(models.Model): name = models.CharField(max_length=100, unique=True) surname = models.CharField(max_length=50)
- makemigrations && migrate
$ ./manage.py sqlmigrate testapp 0001_initial BEGIN; CREATE TABLE `testapp_testmodel` (`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY, `name` varchar(100) NOT NULL UNIQUE, `surname` varchar(50) NOT NULL); COMMIT;
$ cat testapp/migrations/0001_initial.py # -*- coding: utf-8 -*- from __future__ import unicode_literals from django.db import migrations, models class Migration(migrations.Migration): dependencies = [ ] operations = [ migrations.CreateModel( name='TestModel', fields=[ ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), ('name', models.CharField(unique=True, max_length=100)), ('surname', models.CharField(max_length=50)), ], ), ]
- Set unique to False, makemigrations and migrate
from django.db import models class TestModel(models.Model): name = models.CharField(max_length=100, unique=False) surname = models.CharField(max_length=50)
$ cat testapp/migrations/0002_auto_20161106_2004.py # -*- coding: utf-8 -*- from __future__ import unicode_literals from django.db import migrations, models class Migration(migrations.Migration): dependencies = [ ('testapp', '0001_initial'), ] operations = [ migrations.AlterField( model_name='testmodel', name='name', field=models.CharField(max_length=100), ), ]
$ ./manage.py sqlmigrate testapp 0002_auto_20161106_2004
mysql> show create table testapp_testmodel; +-------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Table | Create Table | +-------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | testapp_testmodel | CREATE TABLE `testapp_testmodel` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(100) NOT NULL, `surname` varchar(50) NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `name` (`name`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 | +-------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 1 row in set (0,00 sec)
Notes:
It works well on SQLite
This bug also exists in 1.10
Note:
See TracTickets
for help on using tickets.