📖 world_state 表
世界状态保存表,用于持久化大型世界状态的复杂数据(如冬拥湖、战场进度等)。
📋 表概述
world_state 表是 AzerothCore 的世界状态持久化系统,用于保存跨服务器重启的世界状态数据。使用 MyISAM 引擎以提高读取性能。Data 字段以 longtext 存储复杂的状态数据,每个 Id 对应一类世界状态。
- 主键:(Id)
- 引擎:MyISAM(注意:非 InnoDB)
- 关联表:无直接关联
📊 表结构
| 字段名 | 数据类型 | 默认值 | 说明 |
|---|---|---|---|
Id | int UNSIGNED | (无) | 内部保存ID,标识不同类型的世界状态数据 |
Data | longtext | NULL | 世界状态的序列化数据(文本格式) |
🔍 重要字段详解
Id — 状态类型
内部标识符,对应不同的世界状态模块。例如:Id=1 可能对应冬拥湖(Wintergrasp)战场进度状态,Id=2 可能对应其他需要持久化的全局状态。具体含义由 C++ 源码中的 WorldState 模块定义。
Data — 序列化数据
longtext 类型存储序列化后的世界状态数据。数据格式由对应的 C++ 模块决定,可能是 JSON、INI-like、或自定义格式。服务端在保存和加载时进行序列化和反序列化。
💡 SQL查询示例
查看所有已保存的世界状态
SELECT Id, CHAR_LENGTH(Data) AS 数据长度 FROM world_state;
查看某个世界状态的原始数据
SELECT Id, Data FROM world_state WHERE Id = 1;
❓ 常见问题
Q: 为什么使用 MyISAM 而不是 InnoDB?
MyISAM 对全表扫描和大量读取操作性能更好。world_state 表通常数据量很小(只有几条记录),且以读取为主,MyISAM 适合这种场景。
Q: 这个表和 worldstates 表有什么区别?
world_state 存储的是复杂的大块状态数据(如整个战场的完整状态),worldstates 存储的是简单的键值对形式的状态(如某个全局变量的值)。两者用途不同,互不冲突。