itsource

Swisscom MariaDb Ent의 기본 테이블 스토리지 형식은 무엇입니까?

mycopycode 2022. 9. 18. 10:17
반응형

Swisscom MariaDb Ent의 기본 테이블 스토리지 형식은 무엇입니까?

이런 테이블을 만들 때

CREATE TABLE `dummy` (
  `userid` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
  `providerid` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
  `provideruserid` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

다음과 같이 PK를 정의합니다.

ALTER TABLE dummy ADD PRIMARY KEY (userid,providerid,provideruserid);

다음의 에러가 표시됩니다.

Error: Specified key was too long; max key length is 767 bytes

다음 사항이 올바르게 설정되어 있기 때문에 대부분의 경우 문제가 없다고 생각합니다.

innodb_file_format=Barracuda
innodb_file_per_table=ON
innodb_large_prefix=ON

테이블 스토리지 형식이 문제의 원인일 가능성이 높지만 정의된 기본값을 확인할 수 없습니다.설명서에 따르면 마리아DB(10.2.2 이후)의 기본 테이블 스토리지 형식은 다음과 같습니다.DYNAMIC- 그렇다면DYNAMIC완벽할 것 같지만 사실은 그렇지 않은 것 같아요.

Swisscom MariaDB Ent.의 기본 테이블 저장 형식과 그 이유를 아는 사람이 있습니까?DYNAMIC? (아마 : )

Prd의 MariaDB 버전:

select VERSION();
+-----------------+
| VERSION()       |
+-----------------+
| 10.1.22-MariaDB |
+-----------------+
1 row in set (0.00 sec)

MariaDB KB XtraDB/InnoDB 스토리지 형식에서 인용

Compact

Compact는 MariaDB 10.2.1 이전까지는 기본 형식이었으며 Antelope 파일 형식을 사용하는 경우 일반 사용에 적합합니다.MySQL 5.0에서 도입되었습니다.

에서Compact스토리지 형식(용장)BLOB그리고.TEXT열은 행 페이지에 부분적으로 저장됩니다.행에는 적어도 767바이트가 저장되어 있으며, 이 값을 초과하는 값은 전용 페이지에 저장됩니다.부터Compact용장행의 최대 사이즈는 약 8000바이트입니다.이것에 의해, 다음의 패킷의 수가 제한됩니다.BLOB또는TEXT테이블에서 사용할 수 있는 열.각각BLOB페이지는 데이터 크기에 관계없이 16KB입니다.

행 페이지의 크기 제한을 초과할 경우 다른 열도 다른 페이지에 저장할 수 있습니다.

연구소의 MariaDB 버전(Prd에 곧 도입 예정)이것은 Bosh 릴리스의 관련 행입니다.

select VERSION();
+-----------------+
| VERSION()       |
+-----------------+
| 10.1.26-MariaDB |
+-----------------+
1 row in set (0.00 sec)

오류를 수정하는 방법ERROR 1709 (HY000): Index column size too large. The maximum column size is 767 bytes.Swisscom Application Cloud (다름을 확인하세요)ROW_FORMAT=DYNAMIC):

MariaDB [stackoverflow]> CREATE TABLE `dummy` (
    ->   `userid` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
    ->   `providerid` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
    ->   `provideruserid` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL
    -> ) ENGINE=InnoDB ROW_FORMAT=DYNAMIC DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
Query OK, 0 rows affected (0.02 sec)

MariaDB [stackoverflow]> ALTER TABLE dummy ADD PRIMARY KEY (userid,providerid,provideruserid);
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0

MariaDB [stackoverflow]> show index from dummy;
+-------+------------+----------+--------------+----------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name    | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+-------+------------+----------+--------------+----------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| dummy |          0 | PRIMARY  |            1 | userid         | A         |           0 |     NULL | NULL   |      | BTREE      |         |               |
| dummy |          0 | PRIMARY  |            2 | providerid     | A         |           0 |     NULL | NULL   |      | BTREE      |         |               |
| dummy |          0 | PRIMARY  |            3 | provideruserid | A         |           0 |     NULL | NULL   |      | BTREE      |         |               |
+-------+------------+----------+--------------+----------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
3 rows in set (0.00 sec)

복사 및 붙여넣기 코드는 다음과 같습니다.

CREATE TABLE `dummy` 
             ( 
                          `userid`         VARCHAR(255) collate utf8mb4_unicode_ci NOT NULL, 
                          `providerid`     VARCHAR(255) COLLATE utf8mb4_unicode_ci NOT NULL, 
                          `provideruserid` VARCHAR(255) COLLATE utf8mb4_unicode_ci NOT NULL 
             ) 
             engine=innodb row_format=dynamic DEFAULT charset=utf8mb4 COLLATE=utf8mb4_unicode_ci;

언급URL : https://stackoverflow.com/questions/47203444/what-is-the-default-table-storage-format-for-swisscom-mariadb-ent

반응형