【问题标题】:mysql 8 gives error on creating table ( running migrate command in django )mysql 8 在创建表时出错(在 django 中运行 migrate 命令)
【发布时间】:2022-01-24 11:05:34
【问题描述】:

Django3.2 mysql 5.7

我有一个型号名称hOEEHcQtEckeEGroJCMSGBYeRBDgddrPmvRbFSXFBtktNohn ,它的长度是 48 个字符,它有 1 个非空字段。在 mysql5.7 上它工作正常。

但是当尝试使用mysql8+迁移升级时抛出错误标识符名称太长。

此模型在mysql8.5中生成以下名称abcdefg_hOEEHcQtEckeEGroJCMSGBYeRBDgddrPmvRbFSXFBtktNohn _chk_1,它有65个字符。

mysql8 限制info

我有一个问题,在 mysql8 上解决此问题的可能解决方案是什么?

【问题讨论】:

    标签: django migration mysql-8.0


    【解决方案1】:

    您可以使用db_table Meta option [Django-doc] 在数据库端指定名称。例如:

    class BlackboardLearnerAssessmentDataTransmissionAudit(models.Model):
        # …
        
        class Meta:
            db_table = 'transmission_audit'

    因此,您可以先重命名表,然后升级数据库。如果您可以从头开始,我建议您删除开始使用 BlackboardLearnerAssessmentDataTransmissionAudit 模型的迁移。因此,您可以通过一次迁移创建所有其他模型,这样一来您就不会使用这个长名称,但这假设您可以从 empty 数据库开始迁移。

    【讨论】:

    • 我们有这张表在生产中,有几百万条记录,所以重命名一个表可能会锁定该表?
    • @AwaisQureshi:基于this post,将使用元数据锁,但会在几秒钟内完成。
    猜你喜欢
    • 2017-05-31
    • 2015-06-02
    • 2021-11-01
    • 2023-03-13
    • 2017-03-06
    • 2021-08-28
    • 2019-01-13
    • 2021-08-19
    • 2016-05-31
    相关资源
    最近更新 更多