【发布时间】:2022-09-29 05:00:47
【问题描述】:
我们正在尝试将 XWiki 实例从 v7.0.1 升级到 v13.10.9,并且需要转换旧的生产数据。
我们正在使用 MariaDB v10.3 和 v10.9 进行测试。为了更改字符集,我们使用了 SQL 命令,例如:
alter table `xwiki`.`activitystream_events`
convert to character set utf8mb4 collate \'utf8mb4_unicode_ci\';
但是,上面的命令出错了:
SQL Error [1118] [42000]: (conn=14) Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBs
其他表也存在类似错误。
我的问题:
我们如何解决这个问题?例如。设置更改等
这种类型的数据库转换的常见做法是什么?例如,Java 项目的新版本是否会自动升级后迁移来处理它?
我将非常感谢任何提示和建议。
错误涉及的表的 DDL:
-- xwiki.activitystream_events definition
CREATE TABLE `activitystream_events` (
`ase_eventid` varchar(48) NOT NULL,
`ase_requestid` varchar(48) DEFAULT NULL,
`ase_stream` varchar(255) DEFAULT NULL,
`ase_date` datetime DEFAULT NULL,
`ase_priority` int(11) DEFAULT NULL,
`ase_type` varchar(255) DEFAULT NULL,
`ase_application` varchar(255) DEFAULT NULL,
`ase_user` varchar(255) DEFAULT NULL,
`ase_wiki` varchar(255) DEFAULT NULL,
`ase_space` varchar(255) DEFAULT NULL,
`ase_page` varchar(255) DEFAULT NULL,
`ase_hidden` bit(1) DEFAULT NULL,
`ase_url` varchar(2000) DEFAULT NULL,
`ase_title` varchar(2000) DEFAULT NULL,
`ase_body` varchar(2000) DEFAULT NULL,
`ase_version` varchar(30) DEFAULT NULL,
`ase_param1` varchar(2000) DEFAULT NULL,
`ase_param2` varchar(2000) DEFAULT NULL,
`ase_param3` varchar(2000) DEFAULT NULL,
`ase_param4` varchar(2000) DEFAULT NULL,
`ase_param5` varchar(2000) DEFAULT NULL,
PRIMARY KEY (`ase_eventid`),
KEY `EVENT_TYPE` (`ase_type`),
KEY `EVENT_PRIORITY` (`ase_priority`),
KEY `EVENT_WIKI` (`ase_wiki`),
KEY `EVENT_DATE` (`ase_date`),
KEY `EVENT_PAGE` (`ase_page`),
KEY `EVENT_USER` (`ase_user`),
KEY `EVENT_SPACE` (`ase_space`),
KEY `EVENT_STREAM` (`ase_stream`),
KEY `EVENT_APP` (`ase_application`),
KEY `EVENT_HIDDEN` (`ase_hidden`),
KEY `EVENT_REQUESTID` (`ase_requestid`),
KEY `ase_page_date` (`ase_page`,`ase_date`),
KEY `ase_param1` (`ase_param1`(200)),
KEY `ase_param2` (`ase_param2`(200)),
KEY `ase_param3` (`ase_param3`(200)),
KEY `ase_param4` (`ase_param4`(200)),
KEY `ase_param5` (`ase_param5`(200))
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
-
所有字段都必须是 utf8 吗?是否所有字段都只代表它们所需的长度?注意连接中使用的字段,它们在两个表中应该是相同的。