無法使用 innodb 打開壓縮
我無法使用壓縮創建新表。
我正在使用以下選項,據我所知,這些選項應該允許我使用壓縮。
default-storage-engine = InnoDB innodb_large_prefix = true innodb_file_format = barracuda innodb_file_per_table = true
這是全新安裝的 MySQL,這些配置選項在創建新數據庫之前已設置,因此應設置每個表的文件。
當我嘗試創建一個新表時,我得到以下響應:
CREATE TABLE IF NOT EXISTS `db_example`.`table_example` ( `ugid` INT NOT NULL, `uid` INT NOT NULL, PRIMARY KEY (`ugid`, `uid`)) ENGINE=InnoDB ROW_FORMAT=COMPRESSED;;
錯誤資訊:
Error Code: 1031. Table storage engine for 'table_example' doesn't have this option.
我不明白為什麼會發生這種情況,因為儲存引擎設置為 innodb,它應該支持壓縮。
此外。如果我通過禁用 innodb 嚴格模式來強製完成模式的創建,然後嘗試更改啟用壓縮的表:
ALTER TABLE ${table_goes_here} ROW_FORMAT=COMPRESSED;
我得到以下資訊:
ERROR 1478 (HY000) at line 1: Table storage engine 'InnoDB' does not support the create option 'ROW_TYPE'
錯誤程式碼:1031。“table_example”的表儲存引擎沒有此選項。
我已經經歷了你的錯誤,它基於
ROW_FORMAT
.根據此處的 MySQL 文件,如果省略 ENGINE 選項,則使用預設儲存引擎。
The default engine is InnoDB as of MySQL 5.5.5
(MyISAM
之前5.5.5
)。您可以通過使用 –default-storage-engine 伺服器啟動選項來指定預設引擎,或者通過在**my.cnf
(對於 Linux 環境)或my.ini
**(對於 Windows 環境)配置文件中設置 default-storage-engine 選項。正如 MySQL在此處記錄的那樣 InnoDB 表的預設行格式由 innodb_default_row_format 變數定義,該變數的預設值為 DYNAMIC。當 ROW_FORMAT 表選項未顯式定義或**
ROW_FORMAT=DEFAULT
**指定時使用預設行格式。行
COMPRESSED
格式提供與 DYNAMIC 行格式相同的儲存特性和功能,但增加了對錶和索引數據壓縮的支持。COMPRESSED 行格式支持最多 3072 字節的索引鍵前綴。此功能innodb_large_prefix
由預設啟用的變數控制。**注意:**緊湊型行格式系列還可以在使用可變長度字元集(例如
utf8mb3
or )時優化 CHAR 列儲存utf8mb4
。
對我來說,問題是我之前在表格上啟用了頁面壓縮:
ALTER TABLE t1 COMPRESSION="zlib";
這使我無法應用壓縮的行格式:
ALTER TABLE t1 ROW_FORMAT=COMPRESSED;
..我嘗試時導致以下錯誤:
Error Code: 1031. Table storage engine for 't1' doesn't have this option.
我能夠通過刪除表格上的頁面壓縮來解決問題:
ALTER TABLE t1 COMPRESSION="None";
這使我能夠應用壓縮的行格式。看看刪除頁面壓縮是否能為您解決問題。