首页 > 数据库 >数据库建表键长度问题

数据库建表键长度问题

时间:2024-09-18 12:25:05浏览次数:1  
标签:Compact 存储 字节 数据库 Dynamic 格式 长度 建表键

今天从服务器将数据库的数据拷贝到本地,结果sql执行一直报错,总结一下遇到的几个问题:

  1. sql导入时报错,日志内容记录的片段不一定是有错的那一个语句

    • 感觉很奇怪,但是确实导入时发现那个日志的定位并不准确。

    • 解决:主要是当时日志记录的错误语句我通过查询(控制台)单独执行,并没有报错

    • 因此,在数据量相对还可以接受的时候想要准确的定位,还是通过控制台执行验证吧

  2. 这次导入我的主要报错信息为:

    Specified key was too long; max key length is 767 bytes
    

    通过上网搜,说是在低版本(MySQL5.7 以下)有这个限制,但是之后的版本可以设置 innodb_large_prefix=ON 来增加索引键前缀的限制到 3072 字节,且需要同时设置 innodb_file_format=BarracudaROW_FORMAT=DYNAMICROW_FORMAT=COMPRESSED

    我想着设置呗,结果好家伙,系统中根本找不到该系统变量

    又说是更高的版本中(我的是8.0.35)直接移除了该变量,默认就支持,我就蒙蔽了...这我还怎么排错啊

​ 好在,之前导入过很多次这个库的表结构,之前从没有遇到这个问题啊。于是我打开之前的备份文件进行逐一对比!欸之前的确实 没有问题,最后发现主要的问题在于ROW_FORMAT 这个参数,服务器上的tidb导出的值都是Compact,但是只有Dynamic才能正确导 入。

​ 于是我一键替换了所有的Compact => Dynamic,成功导入~

  1. 问题解决了,但是这两个参数值到底有什么区别呢?

    在 MySQL 中,ROW_FORMAT 是用来指定行存储格式的选项,它影响数据在表空间中的存储方式,进而影响表的存储效率和查询性能。InnoDB 存储引擎提供了几种不同的行格式,其中包括 CompactDynamicRedundantCompressed。在 MySQL 5.7 及更高版本中,CompactDynamic 是两种常用的行格式。以下是它们的主要区别:

    1. Compact:

      • Compact 行格式是为了向后兼容而保留的,它在存储行时会将变长字段的长度信息存储在行的末尾。
      • 这种格式适用于旧版本的 MySQL,但可能不是最高效的存储方式,因为它在存储变长字段时会占用额外的空间来存储长度信息。
      • Compact 行格式不支持行格式的动态转换,这意味着一旦表被创建为 Compact 格式,就不能动态转换为其他行格式。
      • 支持的最大索引键前缀长度为 767 字节。
    2. Dynamic(InnoDB默认):

      • Dynamic 行格式是 MySQL 5.7 引入的,它提供了更灵活的存储方式,允许行中的每个列都有更多的存储空间,并且可以动态地调整。
      • Dynamic 行格式中,变长字段的长度信息是存储在每个列的末尾的,这样可以减少存储长度信息所需的空间,从而提高存储效率。
      • Dynamic 行格式支持更大的索引键前缀长度,如果启用了 innodb_large_prefix 选项,可以达到 3072 字节,而 Compact 行格式则限制在 767 字节。
      • Dynamic 行格式通常更适合存储大型数据行和使用大的索引键前缀,因为它可以更有效地利用空间。
    3. REDUNDANT

      • 这是最早的 InnoDB 行格式,主要用于与旧版本的 MySQL 兼容。它存储更多的元数据,如额外的系统信息和字段长度信息,使得每行数据占用更多的空间。REDUNDANT 行格式支持的最大索引键前缀长度为 767 字节。
    4. COMPRESSED

      • 结合了 DYNAMIC 格式的特性,并引入了数据压缩功能,旨在进一步减少磁盘占用和提高 I/O 效率。这种格式特别适合磁盘空间较为昂贵或 I/O 速度较慢的环境。COMPRESSED 行格式也支持索引键前缀长度为 3072 字节。

至于内部具体的细节我就不深究了,这就涉及数据库底层原理了,到我学习完OB之后看看是否能够理解

标签:Compact,存储,字节,数据库,Dynamic,格式,长度,建表键
From: https://www.cnblogs.com/yuqiu2004/p/18418229

相关文章

  • 安装zblog提示数据库连接失败,怎么解决
    当安装Z-Blog时提示数据库连接失败,可以尝试以下步骤来解决这个问题:检查数据库连接信息:确认数据库服务器地址、数据库名称、用户名和密码是否正确无误。检查数据库连接字符串中的端口号是否正确,以及是否需要使用端口号。确认数据库服务状态:确认数据库服务正在运行。......
  • ZBLOG错误原因:数据库连接错误
    当您在使用Z-Blog时遇到“数据库连接错误”,这可能是由多种原因引起的。根据过去的经验和提供的信息,以下是一些可能的原因及解决方案:权限问题:确保数据库用户拥有足够的权限来连接数据库以及执行必要的读写操作。检查数据库连接配置文件中的用户名和密码是否正确。文件......
  • C#如何使用SQLSugar进行数据库操作
    在现代应用程序中,数据库操作是不可或缺的组成部分。SQLSugar是一个轻量级的ORM(对象关系映射)框架,能够帮助开发者以简单的方式进行数据库交互。本文将介绍如何在C#中使用SQLSugar进行数据库操作。一、什么是SQLSugar?SQLSugar是一个高性能、易于使用的ORM框架,支持多种数据库,包括......
  • Springboot环球视野网站92i41--程序+源码+数据库+调试部署+开发环境
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、项目背景与意义随着全球化进程的加速,信息交流与文化传播日益频繁,公众对于国际时事、多元文化、全球经济动态的需求日益增长。环球视野网站旨在......
  • Springboot机械零件仓储管理系统a0pe2程序+源码+数据库+调试部署+开发环境
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、研究背景与意义随着工业化的快速发展,机械零件作为工业生产的基础组成部分,其仓储管理变得尤为重要。传统机械零件仓储管理方式存在效率低下、信......
  • 关系型数据库
    关系型数据库(RelationalDatabase,RDB)是一种基于关系模型来管理数据的数据库。关系型数据库基于SQLite组件提供了一套完整的对本地数据库进行管理的机制,对外提供了一系列的增、删、改、查等接口,也可以直接运行用户输入的SQL语句来满足复杂的场景需要。不支持Worker线程。关系......
  • 数据库数据恢复—Oracle数据库打开报错“system01.dbf需要更多的恢复来保持一致性,数据
    Oracle数据库故障&检测:打开oracle数据库报错“system01.dbf需要更多的恢复来保持一致性,数据库无法打开”。数据库没有备份,无法通过备份去恢复数据库。恢复zxfg用户下的数据。出现“system01.dbf需要更多的恢复来保持一致性”这个报错的原因可能是控制文件损坏、数据文件损坏,数据......
  • Springboot基于BS的校园招聘网站u3o9e(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、研究背景随着高等教育的普及和就业压力的增大,校园招聘成为大学生求职的重要途径。然而,传统招聘方式存在信息不对称、效率低下等问题,给学生和企......
  • Springboot机票订购系统的设计与实现gz7ete程序+源码+数据库+调试部署+开发环境
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、研究背景与意义随着全球经济的不断发展和人们生活水平的提高,航空旅行已成为现代社会中不可或缺的出行方式之一。然而,传统的机票订购方式存在信......
  • GBase 8a数据库运维管理系统--GDOM
    GDOM旨在为GBase8aMPP数据库提供全生命周期的运维保障,在为数据库提供可视化监控的同时,通过集群管理、主机管理、健康检查、告警等一系列功能,降低客户运维成本,提高客户运维效率,实时保障集群7*24正常运行。GDOM为复杂的集群操作配备了可视化任务配置页面,用户通过任务配置页可......