玩! & MariaDB - 使用 InnoDB 时索引到大 767 字节
Play! & MariaDB - index to large 767 bytes when using InnoDB
请注意:在这里玩新手
系统信息:
OS:拱门 Linux x64
- 4.12.3-1-ARCH
数据库:MariaDB
- mysql Ver 15.1 Distrib 10.1.25-MariaDB,对于 Linux (x86_64) 使用 readline 5.1
问题:
我正在尝试使用来自关联模型 类 的 table 创建一个数据库,其中 index/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 engine (used by default in MariaDB)
2.设置innodb_large_prefix
3.使用barracuda文件格式
4. 将 table(使用 innoDB 引擎)row formatting 和 ROW_FORMAT
设置为 DYNAMIC
或 COMPRESSED
SO 上建议了这些解决方案:
- 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)
我无法设置行格式,因为此时不存在 table,但是当 Evolutions
SQL 脚本创建 table 时,出现以下错误。
问题:
我已到达 Google 搜索结果的第 3 页,但尚未找到解决方案。我该如何解决这个错误?
p.s。作为附带问题,我正在努力寻找有关 Play 的信息和文档! Framework,除了Play!提供的标准文档外,我还能从哪里学到更多的例子,理解等等?
见
结尾
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 TABLE
和 SHOW TABLE STATUS
以帮助验证其中的一些内容。
自从我使用 Archlinux 以来,唯一可用的 MySQL 软件包来自 MariaDB
或 percona-server
。
这些都不能满足标准 Ubuntu 类型 MySQL 安装的要求。
解法:
使用使用原始 MySQL 安装的远程服务器或切换到支持原始 MySQL 安装的 OS
请注意:在这里玩新手
系统信息:
OS:拱门 Linux x64
- 4.12.3-1-ARCH
数据库:MariaDB
- mysql Ver 15.1 Distrib 10.1.25-MariaDB,对于 Linux (x86_64) 使用 readline 5.1
问题:
我正在尝试使用来自关联模型 类 的 table 创建一个数据库,其中 index/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 engine (used by default in MariaDB)
2.设置innodb_large_prefix
3.使用barracuda文件格式
4. 将 table(使用 innoDB 引擎)row formatting 和 ROW_FORMAT
设置为 DYNAMIC
或 COMPRESSED
SO 上建议了这些解决方案:
- 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)
我无法设置行格式,因为此时不存在 table,但是当 Evolutions
SQL 脚本创建 table 时,出现以下错误。
问题:
我已到达 Google 搜索结果的第 3 页,但尚未找到解决方案。我该如何解决这个错误?
p.s。作为附带问题,我正在努力寻找有关 Play 的信息和文档! Framework,除了Play!提供的标准文档外,我还能从哪里学到更多的例子,理解等等?
见
结尾
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 TABLE
和 SHOW TABLE STATUS
以帮助验证其中的一些内容。
自从我使用 Archlinux 以来,唯一可用的 MySQL 软件包来自 MariaDB
或 percona-server
。
这些都不能满足标准 Ubuntu 类型 MySQL 安装的要求。
解法:
使用使用原始 MySQL 安装的远程服务器或切换到支持原始 MySQL 安装的 OS