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', 
    
 

它看起来与InnoDBMyISAM 有关,但我不知道出了什么问题以及如何解决它。谢谢!

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

SQL 错误 #1071 - 指定的键太长;最大密钥长度为 767 字节

MySQL - 错误 1071 阻止更改字符集/排序规则,“指定的键太长......”