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
'itsource' 카테고리의 다른 글
yum을 통해 MariaDB 5.5에서 MariaDB 10으로 업그레이드 실패 (0) | 2022.09.18 |
---|---|
개체를 어레이로 변환하려면 어떻게 해야 합니까? (0) | 2022.09.18 |
SQL: 인접 노드를 유향 그래프로 쿼리합니다. (0) | 2022.09.18 |
HashMap Java 8 구현 (0) | 2022.09.18 |
입력 인수를 기반으로 한 모의 python 함수 (0) | 2022.09.18 |