【问题标题】:Case sensitive unique constraints on django and mysqldjango 和 mysql 上区分大小写的唯一约束
【发布时间】:2017-09-08 15:16:36
【问题描述】:

我有一个具有唯一约束(或者更确切地说是 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 作为后端,所以比较不区分大小写,因为排序规则/字符集是 MYSQL 或 Django 的默认值(正确吗?),我需要区分大小写。

通过阅读我收集到这不能直接在 Django 模型中,因此我需要更改数据库中的表(参见 this SO question

我的第一个问题是更改表或更改列的正确 SQL 语句是什么。我不确定是否需要更改字符集或只是排序规则,或者尽管阅读了各种来源,但我应该将其设置为哪个字符集/排序规则。

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

【问题讨论】:

    标签: mysql django


    【解决方案1】:

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

    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;")
        ]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-05-30
      • 2020-12-25
      • 2020-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-11
      相关资源
      最近更新 更多