Amr*_*hit 6 python mysql django
我有一个现有的mysql数据库,包含下表:
CREATE TABLE IF NOT EXISTS NetworkServerGroups (
GroupID INTEGER UNSIGNED PRIMARY KEY AUTO_INCREMENT,
GroupName VARCHAR(2048) UNIQUE NOT NULL
)
Run Code Online (Sandbox Code Playgroud)
在运行Django的inspectdb工具之后,它生成了以下模型(我手动修改了类名以删除尾随's'):
class Networkservergroup(models.Model):
groupid = models.AutoField(db_column='GroupID', primary_key=True) # Field name made lowercase.
groupname = models.CharField(db_column='GroupName', unique=True, max_length=2048) # Field name made lowercase.
class Meta:
managed = False
db_table = 'NetworkServerGroups'
Run Code Online (Sandbox Code Playgroud)
但是当我来运行测试服务器时,它会抱怨以下错误:
control_panel.Networkservergroup.groupname: (mysql.E001) MySQL does not allow unique CharFields to have a max_length > 255.
Run Code Online (Sandbox Code Playgroud)
但显然,mysql确实支持长度> 255的唯一CharFields,因为使用上面的SQL语句创建的表格非常好.
我该如何解决这个问题?
MySql InnoDB表中唯一键的最大长度为767字节,除非您已innodb_large_prefix设置为on,在这种情况下它是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']
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1729 次 |
| 最近记录: |