MariaDB 导入最大密钥长度

MariaDB Import maximum key length

我们目前正在将数据库移动到另一台服务器,但我们遇到了问题。 我们的数据库非常大,当我们想将它导入我们新的 MariaDB 服务器时 PhpMyAdmin。我们收到一个错误代码,但不知道如何解决。 抱歉,结果是德语,但基本上说密钥太长最大密钥长度为767.

MariaDB版本:MariaDB-10.1.48服务器版本:Ubuntu18.04

服务器版本:Ubuntu18.04

如果有人能帮助解决这个问题,我们将不胜感激!

示例:

CREATE TABLE IF NOT EXISTS `accounts` (
  `name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
  `owner` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `money` int(11) NOT NULL DEFAULT 0,
  PRIMARY KEY (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

结果:

CREATE TABLE IF NOT EXISTS `accounts` (
  `name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
  `owner` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `money` int(11) NOT NULL DEFAULT 0,
  PRIMARY KEY (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
MySQL meldet: Dokumentation

#1071 - Schlüssel ist zu lang. Die maximale Schlüssellänge beträgt 767

据我所知,您正在定义 name VARCHAR(255) COLLATE utf8mb4_unicode_ci NOT NULL 并将其设置为主键。它嵌入在 utf8mb4_unicode_ci你必须将 767 字节(或 3072 字节)的最大索引前缀长度除以 4 得到 191。

要么使用 VARCHAR(191),要么不使用它作为主键

使用

SET GLOBAL innodb_default_row_format='dynamic';

在您的脚本中或在 my.ini

中修改此参数

innodb-default-row-format = dynamic

通过此更改,您可以在最多 3072 字节的列上创建索引。