对django和mysql的区分大小写的唯一约束

时间:2017-09-08 15:16:37

标签: mysql django

我有一个具有唯一约束的模型(或者更确切地说是unique_together):

class ReadingMapping(models.Model):
    mapset = models.ForeignKey('mapping.ReadingMapset')
    data = models.CharField(max_length=500, verbose_name="attributes")

    class Meta:
        unique_together = ('mapset', 'data')

但是因为我使用MYSQL作为后端,所以比较是不区分大小写的,因为collat​​ion / charset是默认的MYSQL或Django(这是正确的吗?)并且我需要它区分大小写。< / p>

从阅读中我收集到的这不能直接在Django模型中,所以我需要改变数据库上的表(参见this SO question

我的第一个问题是改变表格的正确SQL语句是什么,或者更确切地说是列。我不确定是否需要更改字符集或只是整理,或者尽管阅读了各种来源,我应该将其设置为哪种字符集/校对。

我的第二个问题是如何将此更改作为迁移的一部分(我们将拥有数十个数据库)我可以创建一个带有SQL语句的任意迁移文件吗?

1 个答案:

答案 0 :(得分:0)

我发现以下内容适用于迁移文件:

class Migration(migrations.Migration):

    dependencies = [
        ('mapping', '0003_auto_20170725_0737'),
    ]

    operations = [
        migrations.RunSQL("ALTER TABLE mapping_readingmapping CONVERT TO CHARACTER SET latin1 COLLATE latin1_general_cs;")
    ]