mysql row_id为什么是6字节?为什么是8字节

InnoDB row_id解析
本文深入探讨了InnoDB表在缺乏默认主键时,自动生成的row_id特性。详细解释了row_id通常占用的空间大小,及其数据类型。此外,文章还澄清了row_id为何在某些情况下表现为6字节的现象。

mysql row_id是几个字节?

row_id

InnoDB表中在没有默认主键的情况下会生成一个6字节空间的自动增长主键

row_id是整型还是字符型?

源代码中 row_id 是 ib_uint64_t
这是 8字节 uint64_t 是整形

为什么是6个字节?

P.S. Base64编码说明
Base64编码要求把3个8位字节(38=24)转化为4个6位的字节(46=24),之后在6位的前面补两个0,形成8位一个字节的形式。 如果剩下的字符不足3个字节,则用0填充,输出字符使用’=’,因此编码后输出的文本末尾可能会出现1或2个’=’。为了保证所输出的编码位可读字符,Base64制定了一个编码表,以便进行统一转换。编码表的大小为2^6=64,这也是Base64名称的由来。

这段语句是 MySQL 数据表定义中常见的**表选项部分**,通常出现在 `CREATE TABLE` 或 `ALTER TABLE` 语句中。它用于指定表的存储引擎、自增起始值、默认字符集和行格式等属性。 --- ## 🔍 各部分含义详解: ### 1. `ENGINE=InnoDB` - **作用**:指定该表使用的存储引擎为 **InnoDB**。 - **InnoDB 特点**: - 支持事务(ACID) - 支持行级锁 - 支持外键约束 - 适合高并发读写操作 > ✅ 与之相对的还有 `MyISAM`,但不支持事务和外键。 --- ### 2. `AUTO_INCREMENT=174` - **作用**:设置该表中自增字段(`AUTO_INCREMENT`)的**下一个插入值从 174 开始**。 - 例如:如果表中已有最大 ID 为 173,则下一条插入记录的 ID 会是 174。 > ⚠️ 如果表中已有数据,该值可能不会立即生效,具体取决于数据库的实现。 --- ### 3. `DEFAULT CHARSET=utf8` - **作用**:设置该表的**默认字符集为 `utf8`**。 - `utf8` 支持: - 中文、日文、韩文等多语言字符 - 每个字符最多使用 3 字节存储 > ⚠️ 在 MySQL 中,`utf8` 实际上不完全支持四字节字符(如表情符号)。如果需要支持 emoji,应使用 `utf8mb4`。 --- ### 4. `ROW_FORMAT=DYNAMIC` - **作用**:指定表的**行格式为 DYNAMIC(动态)**。 - **InnoDB 支持的行格式**: - `REDUNDANT`:旧版本兼容格式 - `COMPACT`:节省空间 - `DYNAMIC`:推荐格式,支持大字段(如 `TEXT`、`BLOB`)存储在行外 - `COMPRESSED`:压缩存储,节省空间但增加 CPU 开销 > ✅ 使用 `DYNAMIC` 可以提高大字段处理效率,避免行溢出。 --- ## ✅ 示例:完整 `CREATE TABLE` 语句片段 ```sql CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(100) ) ENGINE=InnoDB AUTO_INCREMENT=174 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC; ``` --- ## ✅ 常见应用场景 | 场景 | 推荐配置 | |------|----------| | 需要事务支持 | `ENGINE=InnoDB` | | 自增 ID 从特定值开始 | `AUTO_INCREMENT=xxx` | | 多语言支持 | `DEFAULT CHARSET=utf8mb4` | | 含有大字段(TEXT、BLOB) | `ROW_FORMAT=DYNAMIC` | --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值