DatabaseError: (1071, '指定的密钥太长;最大密钥长度为 767 字节')
Posted
技术标签:
【中文标题】DatabaseError: (1071, \'指定的密钥太长;最大密钥长度为 767 字节\')【英文标题】:DatabaseError: (1071, 'Specified key was too long; max key length is 767 bytes')DatabaseError: (1071, '指定的密钥太长;最大密钥长度为 767 字节') 【发布时间】:2013-12-21 16:14:49 【问题描述】:我有一个 django 项目,我想运行一些单元测试。当我尝试:
python manage.py test
它抛出了这个错误,我在这里找不到太多关于它的信息。
settings.py
中的我的数据库设置:
DATABASES =
'default':
'ENGINE': 'django.db.backends.mysql',
'NAME': 'mydb',
'USER': 'root',
'PASSWORD': 'password',
'HOST': 'localhost',
'PORT': '3306',
它看起来与InnoDB
和MyISAM
有关,但我不知道出了什么问题以及如何解决它。谢谢!
django 版本:1.5.4 mysql版本:5.5
此外,任何 django 模型中都没有设置 unique=True
。
【问题讨论】:
***.com/questions/8746207/…的可能重复 天哪!有人在运行一个愚蠢的关键声明。 @That1Guy 同样的错误,不同的方法。我没有自己创建任何 ddl 很公平。我没有举报。 #1071 - Specified key was too long; max key length is 767 bytes的可能重复 【参考方案1】:解决办法
ALTER DATABASE `databasename` CHARACTER SET utf8;
这里已经公开了
https://***.com/a/43365860/7708836
【讨论】:
【参考方案2】:我找到了自己的解决方案。
如果您的my.cnf
中有此内容:
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
然后它会产生这个“太多字节”的问题。将其恢复为旧的 utf8
并有所帮助。
【讨论】:
Mariadb 10 GA 对我不起作用,您的经验还有其他解决方案吗?尝试了几乎所有的结果... 解决这个问题已经很久了,现在我什么都不记得了 :-) 祝你好运。 我终于可以通过将索引列中的 varchar 长度更改为低于 256 个值来解决它 您可以使用CREATE DATABASE <dbname> CHARACTER SET utf8;
(来自django manual)为每个数据库执行此操作。使用 MariaDB 10.0.27 成功测试。【参考方案3】:
我已经修复了创建新数据库的主题问题,如下所示:
DROP DATABASE IF EXISTS databasename;
CREATE DATABASE databasename DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
【讨论】:
【参考方案4】:使用以下命令创建数据库 创建数据库字符集 utf8;
【讨论】:
以上是关于DatabaseError: (1071, '指定的密钥太长;最大密钥长度为 767 字节')的主要内容,如果未能解决你的问题,请参考以下文章
为啥会出现此错误 #1071 - 指定的密钥太长;最大密钥长度为 1000 字节? [复制]
语法错误或访问冲突:1071 指定的密钥太长;最大密钥长度为 767 字节 [重复]
1071 - 指定的密钥太长;最大密钥长度为 1000 字节 [重复]
错误:#1071 - 指定的密钥太长;最大密钥长度为 1000 字节 - mysql 5.0.91