我有一个现有的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语句创建的表非常好。在
我怎么解决这个问题?在
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设置使该检查静音:
您可以使用^{} 设置关闭项目中的警告:
如果255限制仅适用于Django的旧版本或在某些情况下,那么可能应该修改或删除该检查。django开发人员邮件列表是一个很好的询问这个问题的地方。我不熟悉MySQL,所以我不知道在什么情况下允许长度大于等于255的唯一字符域。在
相关问题 更多 >
编程相关推荐