【问题标题】: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

【问题讨论】:

标签: python mysql django


【解决方案1】:

解决办法

ALTER DATABASE `databasename` CHARACTER SET utf8; 

这里已经公开了

https://stackoverflow.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;

      【讨论】:

        猜你喜欢
        • 2015-06-22
        • 2015-06-29
        • 2016-10-04
        • 2016-04-15
        • 2012-05-31
        • 2012-02-03
        • 2017-04-01
        相关资源
        最近更新 更多