【发布时间】:2017-09-08 20:02:45
【问题描述】:
在 Debian Jessie 中,我安装了 MariaDB 服务器 10.0.30,并尝试增加最大密钥长度。 AFAIU 它取决于启用的配置参数innodb_large_prefix。根据docs,还需要barracuda文件格式和innodb_file_per_table。在配置中设置它们并重新启动服务器后,我在客户端看到这些参数设置正确:
> SHOW GLOBAL VARIABLES LIKE 'innodb_large%';
+---------------------+-------+
| Variable_name | Value |
+---------------------+-------+
| innodb_large_prefix | ON |
+---------------------+-------+
1 row in set (0.00 sec)
> SHOW GLOBAL VARIABLES LIKE 'innodb_file%';
+--------------------------+-----------+
| Variable_name | Value |
+--------------------------+-----------+
| innodb_file_format | Barracuda |
| innodb_file_format_check | OFF |
| innodb_file_format_max | Antelope |
| innodb_file_per_table | ON |
+--------------------------+-----------+
4 rows in set (0.00 sec)
> SHOW GLOBAL VARIABLES LIKE 'innodb_page%';
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| innodb_page_size | 16384 |
+------------------+-------+
1 row in set (0.00 sec)
我不确定,为什么将innodb_file_format_max 设置为Antelope,但是当innodb_file_format_check 为OFF 时,应该没关系。其实即使我也设置了Barracuda,也没什么区别。
如果我现在尝试创建具有大索引的表,例如:
CREATE TABLE `some_table` (
`some_tableID` int(10) unsigned NOT NULL AUTO_INCREMENT,
`column` varchar(750) COLLATE utf8mb4_estonian_ci NOT NULL DEFAULT '',
PRIMARY KEY (`some_tableID`),
KEY `column` (`column`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_estonian_ci;
我得到错误:
ERROR 1709 (HY000): Index column size too large. The maximum column size is 767 bytes.
在 Ubuntu 16.04 和 mysql 服务器 5.7.17 上,所有相关设置都相同(默认),大索引没有问题(对于 utf8mb4,它是 750*4 = 3000)。
我的 MariaDB 设置有什么问题?
【问题讨论】:
-
如果你添加
ROW_FORMAT=DYNAMIC? -
@Hackerman,不能再测试了,因为放弃了 MariaDB 并回到了 MySQL
-
FWIW 它与 MariaDB 无关; MySQL 5.6 也有同样的问题。这在 MariaDB 10.2 中也不是问题。
标签: mysql indexing utf-8 mariadb