【问题标题】:Setting up django-allauth, receive error: Index column size too large设置 django-allauth,收到错误:Index column size too large
【发布时间】:2017-04-05 02:43:35
【问题描述】:

我在安装 django-allauth 时尝试运行 ./manage.py migrate,但总是失败并出现以下错误:django.db.utils.OperationalError: (1709, 'Index column size too large. The maximum column size is 767 bytes.')

我正在使用 MariaDB 10.1.19,在我的 /etc/mysql/my.cnf 文件中,我添加了以下几行来增加可用索引大小:

[server]
innodb-large-prefix = ON

但是,错误仍然发生。

我后来阅读的有关 django-allauth 的文档指出此错误已解决,但我仍然遇到它。

如何确保配置中的这个配置指令真正被读取和使用?

如何解决此索引大小错误?

谢谢!

[更新]: 我在 conf 文件中添加了以下内容:

[server]
innodb_file_format = BARRACUDA
innodb-large-prefix = ON

[table]
ROW_FORMAT = DYNAMIC

仍然收到错误,但是...

[更新 2] 配置文件现在看起来像这样:

[mysqld]
innodb_strict_mode = ON
innodb_file_format = BARRACUDA
innodb-large-prefix = ON
innodb_file_per_table = 1
innodb_buffer_pool_size = 702545920
innodb_file_format_max = BARRACUDA
innodb_log_file_size = 50331648

这些都是有效的,即在我搜索服务器变量时列出。

我已尝试添加:

[client]
innodb_default_row_format = dynamic

但是,这不起作用。也不,如果我在[mysqld]下添加它也行不通

【问题讨论】:

    标签: python mysql django mariadb django-allauth


    【解决方案1】:

    说明(5.7.7 及更高版本不需要)

    获取 MySQL 5.6.3 / 5.5.14(或更高版本)和...

    SET GLOBAL innodb_file_format=Barracuda;
    SET GLOBAL innodb_file_per_table=1;
    SET GLOBAL innodb_large_prefix=1;
    logout & login (to get the global values);
    ALTER TABLE tbl ROW_FORMAT=DYNAMIC;
    

    那么也许你可以索引 (255) utf8mb4 而不必因为 767 限制而缩小到 191。

    服务器部分在 MySQL 中称为[mysqld]; MariaDB 有什么不同吗?

    【讨论】:

    • 请参阅上面的“更新 2”。此外,出于系统原因,我必须使用 MariaDB - 不能切换到 MySQL。
    • 10.2.2-MariaDB 的这些设置已经生效。我还没有找到包含代码的版本。
    • 您已经创建了表吗?如果是这样,请执行ALTER。如果没有,请将ROW_FORMAT=DYNAMIC 添加到CREATE TABLE。您使用的是哪个版本的 MariaDB?
    • 10.0.28 没有 5.7.7 的设置; 10.2.2 可以。
    • 发生错误是因为我正在安装的“django-allauth”包没有考虑到 INNODB 引擎(即假设 MyISAM)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-16
    • 1970-01-01
    • 2020-07-18
    相关资源
    最近更新 更多