玩! &安培; MariaDB - 使用InnoDB时索引到大767字节

时间:2017-08-11 07:41:16

标签: mysql database playframework playframework-2.0 mariadb

请注意:在这里玩新手

系统信息:

操作系统:Arch Linux x64

  • 4.12.3-1-ARCH

数据库:MariaDB

  • mysql Ver 15.1使用readline 5.1分发10.1.25-MariaDB,用于Linux(x86_64)

问题:

我尝试使用关联模型类中的表创建数据库,其中index / id键为long。

错误:

尚未正确应用进化。请检查问题并手动解决,然后再将其标记为已解决。

  

我们收到以下错误:索引列大小太大。最大列大小为767字节。 [ERROR:1709,SQLSTATE:HY000],在尝试运行此SQL脚本时:

# --- Rev:1,Ups - 7feba1a
create table address (
    address_id                    bigint auto_increment not null,
    unit_number                   varchar(255),
    street_name                   varchar(255),
    community_name                varchar(255),
    is_community                  tinyint(1) default 0,
    constraint pk_address primary key (address_id)
);


create table user (
    user_id                       bigint auto_increment not null,
    name                          varchar(255),
    surname                       varchar(255),
    password                      varchar(255),
    email                         varchar(255),
    cell_number                   varchar(255),
    email_verified                tinyint(1) default 0,
    crsftoken                     varchar(255),
    token                         varchar(255),
    constraint pk_user primary key (user_id)
);

下列几种型号:

地址模型

@Entity 
public class Address extends Model {

    @Id
    @Constraints.Required
    @GeneratedValue
    private Long addressId;
    @Constraints.Required
    private String unitNumber;
    @Constraints.Required
    private String streetName;
    private String communityName;
    private Boolean isCommunity;

    public static Finder<String, Address> find = new Finder<String, Address>(Address.class);

用户模型:

@Entity
public class User extends Model {

    @Id
    @Constraints.MinLength(10)
    @Constraints.MaxLength(10)
    @GeneratedValue
    private Long userId;

    private String name;
    private String surname;

    @Constraints.Required
    private String password;

    @Constraints.Email
    @Constraints.Required
    private String email;

    @Constraints.Required
    @Constraints.Pattern("[0]\\d{2}[- ]{0,1}\\d{3}[- ]{0,1}\\d{4}")
    private String cellNumber;
    private Boolean emailVerified = false;

    private String CRSFToken;

    public static Finder<String, User> find = new Finder<String, User>(User.class);

我发现了什么:

研究这个错误,似乎意味着我应该: 1.使用innoDB引擎(MariaDB中默认使用) 2.设置innodb_large_prefix 3.使用barracuda文件格式 4.使用ROW_FORMATDYNAMICCOMPRESSED

设置表格(使用innoDB引擎)row formatting

这些解决方案在SO上提出:

  • here
  • here
  • here(包括设置整理,但我无法在Play中找到如何执行此操作!)

和一个独立的博客:

  • here(最有帮助的)

更多信息:

我试图设置这些:

MariaDB [(none)]> CREATE DATABASE eatalotdb;
Query OK, 1 row affected (0.00 sec)

MariaDB [(none)]> set GLOBAL storage_engine='InnoDb';
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> set GLOBAL innodb_large_prefix = ON;
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> set global innodb_file_format = BARRACUDA;
Query OK, 0 rows affected (0.00 sec)

我无法设置行格式,因为此刻不存在任何表,但是当Evolutions SQL脚本创建表时,会显示以下错误。

问题:

我已经在Google搜索结果的第3页结束了,但还没有找到解决方案。如何解决此错误?

P.S。作为一个附带问题,我正在努力寻找关于Play的信息和文档!框架,除了Play!提供的标准文档之外,还可以通过示例,理解等方式学习更多内容吗?

2 个答案:

答案 0 :(得分:0)

见结尾 http://mysql.rjweb.org/doc.php/index_cookbook_mysql#speeding_up_wp_postmeta

重新配置(如果保留5.6.3 - 5.7.6或等效的MariaDB) - 需要更改的4件事:Barracuda + innodb_file_per_table + innodb_large_prefix +动态或压缩。

请提供SHOW CREATE TABLESHOW TABLE STATUS以帮助验证其中的一些内容。

答案 1 :(得分:0)

由于我使用的是Archlinux,因此唯一可用的MySQL软件包来自MariaDBpercona-server

这些都不能满足标准Ubuntu类型MySQL安装的要求。

<强>解决方案:

使用使用原始MySQL安装的远程服务器或切换到支持原始MySQL安装的操作系统