gpt4 book ai didi

mysql - mariadb 中的 key 太长,但具有相同编码的相同脚本适用于 mysql

转载 作者:行者123 更新时间:2023-11-29 03:59:42 25 4
gpt4 key购买 nike

我一直在阅读这个 question 的几个版本和相关文章,虽然我最终确实解决了我的问题(最终在我的 sql 脚本上执行了 s/utf8mb4/utf8/g),但我仍然不知道为什么这在 MySQL 上有效是的,但必须在 MariaDB 中进行搜索替换。

设置:

  • 机器1:Mysql 5.7.19
  • 机器 2:MariaDb 10.1.25

在两台机器上,我创建的数据库如下:

CREATE DATABASE `test` COLLATE 'utf8mb4_general_ci'

输入脚本是一个 16MB 的 SQL 文件,包含大约 300 个表,所有表都声明为 ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=COMPRESSED

当我尝试在 MariaDb 上导入此文件时,我得到:

ERROR 1071 (42000) at line 602: Specified key was too long; max key length is 767 bytes

但是我在 MySQL 上导入相同的文件但没有更改,所有表都创建得很好。

为了能够在 MariaDB 机器上执行相同的操作,我需要在运行脚本之前执行上述 s/utf8mb4/utf8/g

问题的要点是:有没有一种方法可以设置 MariaDB,以便我可以以与 MySQL 相同的格式导入文件?

关于 duplicate由@Cbroe 提出,它在几个方面失败了:

1 - 它解释了 MyIsam 和 InnoDB 之间索引大小的差异(我在这两种情况下都使用 InnoDB,虽然它在 MySQL 中工作,但在 MariaDB 中失败)。

2 - 如果可能的话,它没有解释如何让 MariaDB 像 MySQL 一样工作。由于可以让这个脚本与这个引擎一起工作并且这个编码在 MySQL 上工作,是否可以在 MariaDB 中做同样的事情?如果不是,为什么不呢?

此外,我们已经有了一个有效的答案,它与所谓的重复项中的答案不同。

最佳答案

要启用对大键的支持,您必须启用系统变量 innodb_large_prefix :

When this option is enabled, index key prefixes longer than 767 bytes (up to 3072 bytes) are allowed for InnoDB tables that use DYNAMIC or COMPRESSED row format. See Section 14.8.1.7, “Limits on InnoDB Tables” for maximums associated with index key prefixes under various settings.

考虑到这一点:

Default values for Mysql :

Permitted Values (<= 5.7.6)   Type    boolean  
Default OFF
Permitted Values (>= 5.7.7) Type boolean
Default ON

Default values for MariaDB:

Data Type: boolean
Default Value:
ON (>= MariaDB 10.2.2)
OFF (<= MariaDB 10.2.1)

因此在您的 MariaDB 配置中设置该值(您还需要使用正确的 row_format、innodb_file_format 并启用 innodb_file_per_table)。

关于mysql - mariadb 中的 key 太长,但具有相同编码的相同脚本适用于 mysql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45822688/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com