Play! & MariaDB - InnoDB를 사용할 때 큰 767바이트로 인덱싱
참고: 여기서 초보자 역할을 합니다.
시스템 정보:
OS: Arch Linux x64
- 4.12.3-1-ARCH
데이터베이스:마리아DB
- mysql Ver 15.1 Linux(x86_64)용 읽기 줄 5.1을 사용하여 10.1.25-MariaDB 배포
문제:
인덱스/id 키가 너무 긴 관련 모델 클래스의 테이블이 있는 데이터베이스를 만들려고 합니다.
오류:
진화가 제대로 적용되지 않았습니다.문제를 확인하고 해결된 것으로 표시하기 전에 수동으로 해결하십시오.
다음 오류가 발생했습니다.인덱스 열 크기가 너무 큽니다.최대 열 크기는 767바이트입니다.[오류: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_FORMAT
로.DYNAMIC
또는COMPRESSED
SO에서 제안된 솔루션은 다음과 같습니다.
그리고 독립 블로그:
- 여기 (그 중에서 가장 도움이 되는)
추가 정보:
설정을 시도했습니다.
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에 대한 정보와 문서를 찾는 데 어려움을 겪고 있습니다!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로 전환
언급URL : https://stackoverflow.com/questions/45629589/play-mariadb-index-to-large-767-bytes-when-using-innodb
'programing' 카테고리의 다른 글
노드 파일의 시작 부분에서 "/usr/bin/env node"는 정확히 무엇을 합니까? (0) | 2023.09.04 |
---|---|
"초당 쿼리 수"를 측정하는 방법은 무엇입니까? (0) | 2023.09.04 |
Google Analytics에서 실시간 방문자 스크랩 (0) | 2023.09.04 |
파이썬에서 문자열 리터럴을 탈출하지 않고 작성하는 방법은 무엇입니까? (0) | 2023.09.04 |
CSS: 애니메이션 vs.전이 (0) | 2023.09.04 |