【发布时间】:2017-08-11 07:41:15
【问题描述】:
请注意:在这里玩新手
系统信息:
操作系统:Arch Linux x64
- 4.12.3-1-ARCH
数据库:MariaDB
- mysql Ver 15.1 Distrib 10.1.25-MariaDB,适用于 Linux (x86_64),使用 readline 5.1
问题:
我正在尝试使用关联模型类中的表创建一个数据库,其中索引/id 键太长。
错误:
没有正确应用进化。请检查问题并手动解决,然后再将其标记为已解决。
我们收到以下错误:索引列大小太大。最大列大小为 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.设置表(带有innoDB引擎)row formatting和ROW_FORMAT到DYNAMIC或COMPRESSED
这些解决方案是在 SO 上提出的:
还有一个独立的博客:
- 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 页,但尚未找到解决方案。我该如何解决这个错误?
附言作为一个附带问题,我正在努力寻找有关 Play 的信息和文档!框架,除了 Play! 提供的标准文档,我还能在哪里通过示例、理解等了解更多?
【问题讨论】:
-
innodb_file_per_table也必须启用(尽管默认情况下已启用)。您应该在服务器配置中设置这些值,否则,它们会在重新启动后重置为默认值,并且任何未明确指定格式的更改表都会将更改后的表的格式重置为(可能)错误的默认值。 (我不知道play!框架,所以可能有一个选项可以在那里做)另外:sql脚本不会导致错误(它不包含大索引),所以也许检查你是否需要有问题的索引,或者需要大的 varchars(例如unit_number的 255 个字符)。
标签: mysql database playframework playframework-2.0 mariadb