当try 恢复mysql数据库时,我try 以下操作.此数据库位于容器中

cat ~/Downloads/dbname_bkp_20240423-01.sql | docker exec -i mysql-server-main /usr/bin/mysql -u root --password=password dbname

我收到这条消息:

第25行错误1118将某些列更改为文本或BEP或使用ROW_FORMAT= DYNAIC或ROW_FORMAT= COMPLSMED可能会有所帮助.在当前行格式中,768字节的DBC前置存储为内联.

线25

DROP TABLE IF EXISTS `accounts`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `accounts` (
  `id` char(36) NOT NULL,
  `name` varchar(150) DEFAULT NULL,
  `date_entered` datetime DEFAULT NULL,
  `date_modified` datetime DEFAULT NULL,
  `modified_user_id` char(36) DEFAULT NULL,
  `created_by` char(36) DEFAULT NULL,
  `description` text,
  `deleted` tinyint(1) DEFAULT '0',
  `assigned_user_id` char(36) DEFAULT NULL,
  `type` varchar(50) DEFAULT NULL,
  `industry` varchar(50) DEFAULT NULL,
  `annual_revenue` varchar(100) DEFAULT NULL,
  `phone_fax` varchar(100) DEFAULT NULL,
  `billing_address_street` varchar(150) DEFAULT NULL,
  `billing_address_city` varchar(100) DEFAULT NULL,
  `billing_address_state` varchar(100) DEFAULT NULL,
  `billing_address_postalcode` varchar(20) DEFAULT NULL,
  `billing_address_country` varchar(255) DEFAULT NULL,
  `rating` varchar(100) DEFAULT NULL,
  `phone_office` varchar(100) DEFAULT NULL,
  `phone_alternate` varchar(100) DEFAULT NULL,
  `website` varchar(255) DEFAULT NULL,
  `ownership` varchar(100) DEFAULT NULL,
  `employees` varchar(10) DEFAULT NULL,
  `ticker_symbol` varchar(10) DEFAULT NULL,
  `shipping_address_street` varchar(150) DEFAULT NULL,
  `shipping_address_city` varchar(100) DEFAULT NULL,
  `shipping_address_state` varchar(100) DEFAULT NULL,
  `shipping_address_postalcode` varchar(20) DEFAULT NULL,
  `shipping_address_country` varchar(255) DEFAULT NULL,
  `parent_id` char(36) DEFAULT NULL,
  `code` varchar(10) DEFAULT NULL,
  `campaign_id` char(36) DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE,
  KEY `idx_accnt_id_del` (`id`,`deleted`) USING BTREE,
  KEY `idx_accnt_name_del` (`name`,`deleted`) USING BTREE,
  KEY `idx_accnt_assigned_del` (`deleted`,`assigned_user_id`) USING BTREE,
  KEY `idx_accnt_parent_id` (`parent_id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT;
/*!40101 SET character_set_client = @saved_cs_client */;

关于如何处理此消息有什么建议吗?

提前问候和感谢

推荐答案

在您的表中,我计算出charvarchar列总共有2701个字符,这意味着8103个字节,因为utf8每个字符最多计算3个字节.

加上text列最多768个字节.任何超过768字节的文本都将溢出到其他页面上.

这就是COMPACT行格式的工作原理.它在页面上的每个CHAR/VAR/TEK列最多存储768个字节,并且总数必须少于8126个字节.但在您的情况下,它超过了8126个字节.

您可以通过使用DYNAMIC行格式而不是COMPACT行格式来修复此问题.它以不同的方式存储字符串;如果页面上的字符太多,它会将该字符串的all个推送到溢出页面上,并在主页上仅存储20字节的引用.

或者您可以缩短一些字符串列长度,以便总长度足够短,以适应限制.

或者,您可以对某些列使用单字节字符集(在适当的情况下),因此每个字符串每个字符只计算一个字节.

或者您可以删除一些列.

Mysql相关问答推荐

MySQL 8.0.34-从后端系统管理AWS RDS上的持久连接内存使用

MySQL:一个查询中的SELECT语句,用于从一个表中检索所有数据,并仅从另一个表中检索一个数据

MySQL:统计单词在单元格中出现的次数,并将数字放在bra中单词的旁边

MySQL 8.0 可以在 Select 语句中返回 JSON 对象数组吗?

MySQL函数 - 如何对select查询应用多个条件

MySql SELECT 查找包含数字的区间的时间复杂度是多少?

仅计算 DATEDIFF (MySQL) 中的工作日

MySQL如何在小时和分钟之间 Select 时间

如何使用 SQL 聚合和求和相似 Select 的值?

MySQL 每组最大 n 只适用于多行

基于 3 个条件 Select 3 行的最佳 MySQL 索引和查询

插入重复键查询以在每一行上进行自定义更新

使用 MySQL 在树中查找 Leaf

MySQL Group By 和 Sum 其他列的总值

有没有办法在 Zend Framework 1.5 中执行INSERT...ON DUPLICATE KEY UPDATE?

如何使主键从 1000 开始?

我如何决定何时使用右连接/左连接或内连接或者如何确定哪个表在哪一侧?

PHP 判断 NULL

utf8mb4_unicode_ci 与 utf8mb4_bin

MySQL 导出到 outfile:CSV 转义字符