programing

Play! & MariaDB - InnoDB를 사용할 때 큰 767바이트로 인덱싱

codeshow 2023. 9. 4. 20:51
반응형

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)

현재 테이블이 존재하지 않지만 테이블이 생성될 때 행 형식을 설정할 수 없습니다.EvolutionsSQL 스크립트, 아래 오류가 표시됩니다.

질문:.

구글 검색 결과의 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

반응형