django.db.utils.OperationalError: (1071, 'Specified key was too long; max key length is 767 bytes')
环境介绍
Django (2.1) Python 3.5.5
mysqlclient (1.4.2.post1)
Mysql 5.6.28
RHEL 7.3
在migrate时候报错
model代码如下
class EnvironmentVariable(models.Model):
"""
环境变量表
"""
application = models.ForeignKey(Application, verbose_name="所属应用", related_name="environment_variables",
on_delete=models.CASCADE)
key = models.TextField(verbose_name="键")
value = models.TextField(verbose_name="值", null=True, blank=True)
这个表在migrate时候出现BLOB/TEXT column 'id' used in key specification without a key length"
BLOB/TEXT不能被用作索引,所以报错
于是修改key字段
key = models.CharField(max_length=255, verbose_name="键")
然后makemigration 继续migrate没问题
当修改key的 max_length
key = models.CharField(max_length=1024, verbose_name="键")
出现报错:
django.db.utils.OperationalError: (1071, 'Specified key was too long; max key length is 767 bytes')
索引用的字段长度不能大于255
发现:
表在migrate时候会添加 application_id 和key两个字段的唯一联合索引
名:paas_environmentvariable_application_id_key_0838cfb7_uniq 拦位 application_id,key 索引类型 Unique 索引方法BTREE
解决:在数据库表设计里面去掉拦位key的索引
观察了数据库里面其它用户所创建的表都是两个字段做的唯一联合索引
思考:Django model里面有个db_index=True 的参数是够可以解决停止在migrate时候把key这个字段加入索引
Django所用(傻瓜式,支持多种数据库类型)数据库操作模块在migrate索引添加机制原理分析,最好能分析源代码
参考:
https://github.com/aschn/drf-tracking/issues/29#issuecomment-264030924
https://github.com/victorx98/drf-tracking/commit/efc2350b202d78cc2db9aed2763e381bb84ccae1
有人在model加了这个
class Meta:
unique_together = ("application", "key")
django.db.utils.OperationalError: (1071, 'Specified key was too long; max key length is 767 bytes')的更多相关文章
- django.db.utils.OperationalError: (1071, 'Specified key was too long; max key length is 767 bytes');
在使用utf8mb4字符集的情况下,如果列存在索引,那么varchar的最大长度是191 数据库版本: 在使用utf8字符集的情况下,如果列存在索引,那么varchar的最大长度是255. 在大字段上 ...
- 在执行migrate的时候出现问题(错误见末尾): django.db.utils.OperationalError: (1045, "Access denied for user ‘ODBC‘@‘localho st‘ (using password: YES)")
Python框架之Django的数据库 在执行migrate的时候出现问题(错误见末尾) django.db.utils.OperationalError: (1045, "Access d ...
- django.db.utils.OperationalError: 1050解决方案
manage.py migrate时进行同步数据库时出现问题;django.db.utils.OperationalError: (1050, "Table '表名' already exi ...
- django.db.utils.OperationalError: (1045, "Access denied for user 'ODBC'@'localhost' (using password)
错误描述: 从SQLLITE数据库换为MYSQL数据库,执行 python manage.py migrate 命令时,报错:django.db.utils.OperationalError: (10 ...
- django.db.utils.OperationalError: 1045错误
django.db.utils.OperationalError: (1045, "Access denied for user 'root'@'localhost' (using pass ...
- django.db.utils.OperationalError: no such table: auth_user
关于使用django 首次创建超级管理员时,出现 django.db.utils.OperationalError: no such table: auth_user 错误 1.首先使用命 ...
- Why getting this error “django.db.utils.OperationalError: (1050, ”Table 'someTable' already exists“)”
0down votefavorite I am getting error like django.db.utils.OperationalError: (1050, "Table 's ...
- django.db.utils.OperationalError: (1050, "Table '表名' already exists)解决方法
django.db.utils.OperationalError: (1050, "Table '表名' already exists)解决方法 找到解决方案,执行: python mana ...
- 解决:django.db.utils.OperationalError: unable to open database file
这是一个从GitHub上下载的,一个网站项目的源码.想要在自己的电脑上运行,期间过程相当曲折,不过至此终于是完成了. 1.安装过程: python2->virtualenv->django ...
随机推荐
- popupWindow自适应大小
// popupWindow自适应大小 popupWindow = new PopupWindow(view, LayoutParams.WRAP_CONTENT, LayoutParams.WRAP ...
- view是视图层+action是控制层+service是业务层+dao是数据访问层。
- VS2010下连接Oracle数据库的方法
在vs2010下使用OleDB连接Oracle数据库 ——此方法不需要配置数据源. 1. 在“服务器资源管理器”中,选择“数据库连接”,右击,选择“添加连接”. 2. 出现下面的界面,并按图中选择“用 ...
- Swift使用CoreLocation,你必须要看这一篇
CoreLocation,在我们这里讨论的是一个最常用的东西,就是用Location Manger获取用户当前的位置. 整个的来说非常简单.只要这样: import CoreLocation 需要使用 ...
- Hello_Motion_Tracking 任务一:Project Tango采集运动追踪数据
我们来看一下中的几个基本的例子 (区域描述.深度感知.运动追踪.视频4个) 参考:Google Tango初学者教程 1. hello_motion_tracking package com.proj ...
- HRBUST1313 火影忍者之~静音 2017-03-06 16:11 39人阅读 评论(0) 收藏
火影忍者之-静音 传说中的火之国一年一度的公务员选拔又开始了!木叶忍者村此次也要从中选拔出5人来,作为即将上任的新火影纲手的小弟-,可是报考公务员的人数实在是太--多啦!所以纲手的贴身随从-静音小姐, ...
- 无线破解那点事(PJ)
有一段时间没有写博客了.只能说苦逼学生党伤不起啊,还好没挂-废话不说了,近期将会讲讲无线PJ那点事,也不是啥干货,就一些先前的笔记分享把. 0.无线网卡 想要提高破解效率,一块猛一点的USB无线网卡是 ...
- Mysql错误: ERROR 1205: Lock wait timeout exceeded try restarting transaction解决办法
select * from information_schema.INNODB_TRX;show full processlist;//找出目前连接的列表kill ID//根据ID kill掉
- TFS (Team Foundation Server) 2013集成Maven构建
Team Foundation Server原生就支持跨平台的构建,包括Ant和Maven两种构建方式.通过配置构建服务器,连接TFS源代码库,可以实现持续集成构建,自动检测代码库健康状况,进而实现自 ...
- C#学习(1):类型约束
where T : class泛型类型约束 类型参数约束,.NET支持的类型参数约束有以下五种: where T : struct | T必须是一个结构类型 where T : class T必须是一 ...