【问题标题】:Converting XWiki table in MariaDB, from latin1 to utf8, got SQL Error [1118] [42000]: Row size too large将 MariaDB 中的 XWiki 表从 latin1 转换为 utf8,得到 SQL 错误 [1118] [42000]: Row size too large
【发布时间】: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 吗?是否所有字段都只代表它们所需的长度?注意连接中使用的字段,它们在两个表中应该是相同的。

标签: mariadb xwiki


【解决方案1】:

过去,我们一直成功地使用此脚本(从保存有编程权限的 XWiki 页面执行)在升级后将许多 XWiki 实例转换为真正的 UTF8(utf8mb4),据我记得在 MySQL 和 MariaDB 变体上:

https://snippets.xwiki.org/xwiki/bin/view/Extension/Migrate%20MySQL%20databases%20to%20utf8mb4/

升级通常比您的升级要多一点(从 7 跳到 13),但您仍然应该试一试。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-19
    • 2015-04-09
    • 1970-01-01
    • 2011-05-03
    • 1970-01-01
    • 1970-01-01
    • 2022-01-04
    相关资源
    最近更新 更多