在Debian Jessie中,我安裝了MariaDB服務器10.0.30,並嘗試增加最大密鑰長度。 AFAIU取決於配置參數innodb_large_prefix
被啓用。根據docs,它還需要barracuda
文件格式和innodb_file_per_table
。如何在MariaDB 10中啓用大型索引?
> 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
@Hackerman,不能再測試了,因爲放棄了MariaDB並回到MySQL –
FWIW它與MariaDB無關; MySQL 5.6有同樣的問題。這在MariaDB 10.2中也不是問題。 –