MariaDB 5.3引入了动态列。根据我的理解,下一个版本的mysql应该有类似mariadb的功能吗?
我目前正在运行mysql 5.5.9,我想要每行使用动态列。
所以我在mysql网站上阅读,以便实现这个目的:
innodb_file_format应该设置为Barracuda。
完成。
--------------
show variables like "%innodb_file%"
--------------
+--------------------------+-----------+
| Variable_name | Value |
+--------------------------+-----------+
| innodb_file_format | Barracuda |
| innodb_file_format_check | ON |
| innodb_file_format_max | Barracuda |
| innodb_file_per_table | ON |
+--------------------------+-----------+
4 rows in set (0.00 sec)
然后我继续创建我的表进行测试
CREATE TABLE `test` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`dyn` blob,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC
然后我尝试插入
insert into test(`dyn`) VALUES (COLUMN_CREATE(1, "black", 3, "Linux"))
我收到以下错误:
FUNCTION db.COLUMN_CREATE does not exist
所以我的问题是mysql不提供这些功能吗?我应该切换到mariadb进行测试吗?
答案 0 :(得分:2)
基于documentation,似乎MySQL 不提供此功能。
动态行格式实际上提供了一种不同的方法来存储在某些情况下可能更有效的行,不是一种拥有变量表模式的方法:
当innodb_file_format设置为Barracuda并创建一个表时 使用ROW_FORMAT = DYNAMIC或ROW_FORMAT = COMPRESSED,列值较长 完全存储在页外,并且聚集索引记录包含 只有一个指向溢出页面的20字节指针。
如果您需要这种灵活的架构,请查看entity-attribute-value模式。