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

很可能是表存储格式导致了这里的问题,但我无法检查定义的默认值。根据文档,MariaDB(自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

在MariaDB 10.2.1之前,Compact是默认格式,并且适用如果使用Antelope文件格式,则用于一般用途。它被引入在MySQL 5.0中。

Compact存储格式中(如冗余),BLOBTEXT列部分存储在行页面中。至少767个字节存储在行;超过该值的值存储在专用页面。由于Compact和冗余行的最大大小约为8000字节,这限制了可以使用的BLOBTEXT列的数量在一张桌子上。无论数据大小如何,每个BLOB页面都是16KB。

如果其他列超过行页面的大小限制。

我们实验室中的MariaDB版本(即将部署在Prd上)。这是bosh发布中的相关行。

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

如何修复Swisscom应用云上的错误ERROR 1709 (HY000): Index column size too large. The maximum column size is 767 bytes.(查看差异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;

最新更新