2017-08-11 77 views
1
当指数大767个字节

请注意:玩新手在这里玩! &MariaDB的 - 使用的是InnoDB

系统信息:

OS:Arch Linux的x64的

  • 4.12.3-1 -ARCH

数据库:MariaDB

  • MySQL的版本15.1 DISTRIB 25年1月10日 - MariaDB的,用于Linux(x86_64的),使用的readline 5.1

问题:

我attemptig创建具有相关联的从模型类表的数据库,索引/ ID密钥要长。

错误:

的进化尚未正确应用。请在将问题标记为已解决之前,检查问题并手动解决问题。

We got the following error: Index column size too large. The maximum column size is 767 bytes. [ERROR:1709, SQLSTATE:HY000], while trying to run this SQL script:

# --- 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.使用所述​​文件格式 4.集表(具有InnoDB引擎)row formattingROW_FORMATDYNAMICCOMPRESSED

这些溶液建议就SO:

  • here
  • here
  • here(包括设置整理,但我无法找出如何在玩这样做!)

和独立博客:

  • 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脚本创建表格时,会显示以下错误。

问:

我已经结束了在谷歌搜索结果第3页,但没有找到一个解决方案。我该如何解决这个错误?

p.s.作为一个侧面问题,我正努力在Play上查找信息和文档!框架,除了Play!提供的标准文档外,还有哪些地方可以通过例子,理解等来学习更多?

+0

'innodb_file_per_table'必须被太启用(虽然它是默认启用) 。您应该在您的服务器配置中设置值,否则,它们在重新启动后重置为默认值,并且任何没有明确指定格式的alter table都会将已更改表格的格式重置为(可能)错误的默认值。 (我不知道play!框架,所以可能有一个选项可以做到这一点)另外:sql脚本不会导致错误(它不包含大的索引),所以也许检查你是否需要这个问题索引,或者需要大的变量(例如,'unit_number'为255个字符)。 – Solarflare

回答

0

自从我使用Archlinux以来,唯一可用的MySQL包是从MariaDBpercona-server

这些都不符合标准Ubuntu类型MySQL安装的要求。

解决方案:

使用安装在远程服务器使用原始MySQL或切换到OS支持原始MySQL安装