Django说MySQL不允许唯一字符域的最大长度大于255,但它允许

2024-09-30 22:20:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个现有的mysql数据库,下表如下:

CREATE TABLE IF NOT EXISTS NetworkServerGroups (
        GroupID INTEGER UNSIGNED PRIMARY KEY AUTO_INCREMENT,
        GroupName VARCHAR(2048) UNIQUE NOT NULL
        )

运行Django的inspectdb工具后,它生成了以下模型(我手动修改类名以删除后面的's'):

^{pr2}$

但当我运行测试服务器时,它会抱怨以下错误:

control_panel.Networkservergroup.groupname: (mysql.E001) MySQL does not allow unique CharFields to have a max_length > 255.

但是很明显,mysql确实支持长度大于255的惟一CharFields,因为使用上面的SQL语句创建的表非常好。在

我怎么解决这个问题?在


Tags: key数据库autoifcreateexistsmysqltable
2条回答

MySql InnoDB表中唯一键的最大长度是767字节,除非您设置了innodb_large_prefix,在这种情况下是3072字节。参见:

https://dev.mysql.com/doc/refman/5.7/en/innodb-restrictions.html

由于Mysql 5.7.7,innodb_large_prefix默认为on。参见:

https://dev.mysql.com/doc/refman/5.7/en/innodb-parameters.html#sysvar_innodb_large_prefix

因此,我猜Django会选择保守的选项,因为它与Mysql 5.5一起工作:

https://docs.djangoproject.com/en/1.11/ref/databases/#version-support

正如@Alasdair在他们的回答中所示,您可以使用SILENCED_SYSTEM_CHECKS设置使该检查静音:

SILENCED_SYSTEM_CHECKS = ['mysql.E001']

您可以使用^{}设置关闭项目中的警告:

SILENCED_SYSTEM_CHECKS = ['mysql.E001']

如果255限制仅适用于Django的旧版本或在某些情况下,那么可能应该修改或删除该检查。django开发人员邮件列表是一个很好的询问这个问题的地方。我不熟悉MySQL,所以我不知道在什么情况下允许长度大于等于255的唯一字符域。在

相关问题 更多 >