character_account_data 帐户缓存数据表
存储角色的客户端缓存数据(UI布局、宏命令等)
官方文档来源表概述
character_account_data 表是魔兽世界客户端数据同步系统的核心。它存储角色在不同电脑登录时需要的UI设置、宏命令、动作条布局等缓存数据,使玩家在任何电脑登录同一个角色时都能保持一致的游戏体验。
通过 data 字段(BLOB 类型) 存储压缩后的二进制数据。不同的 type 值代表不同种类的缓存数据。character_account_data 实现"云同步"功能——玩家的UI偏好设置存储于服务器端,换电脑登录后自动恢复。
表结构
| 字段名 | 类型 | 说明 |
|---|---|---|
| guid | INT UNSIGNED | 角色全局唯一标识符(联合主键) |
| type | TINYINT UNSIGNED | 缓存数据类型(联合主键) |
| time | INT UNSIGNED | 数据最后更新时间(Unix时间戳) |
| data | BLOB | 压缩后的缓存数据(二进制格式) |
核心字段说明
type 缓存类型详解
| type 值 | 枚举常量 | 存储内容 | 说明 |
|---|---|---|---|
| 0 | GLOBAL_CACHE_MASK | 全局配置缓存 | 跨角色的通用UI/系统设置 |
| 1 | CHARACTER_CACHE_MASK | 角色配置缓存 | 当前角色的UI布局和宏命令 |
| 2 | ACCOUNT_CACHE_MASK | 帐号级配置缓存 | 同帐号下所有角色共享的配置 |
| 3 | BINDING_CACHE_MASK | 按键绑定缓存 | 键盘快捷键和鼠标绑定配置 |
| 4 | MACRO_CACHE_MASK | 宏命令缓存 | 角色专用的宏命令文本 |
data BLOB 字段
data 字段存储由魔兽世界客户端序列化和压缩后的二进制数据。数据经过压缩(通常使用 zlib/deflate),格式由客户端版本决定。直接修改可能导致客户端崩溃或数据丢失,不建议手动解读或修改。
time 字段
time 为 Unix 时间戳,记录该类型数据最后一次被客户端上传的时间。如需清除某个角色的UI设置(解决UI错误),直接删除 type=1 的记录即可,角色重新登录后客户端会使用默认配置。
实际案例
查看角色的缓存数据状态
-- 查询角色的所有缓存数据类型和更新时间
SELECT type,
CASE type
WHEN 0 THEN '全局配置'
WHEN 1 THEN '角色配置'
WHEN 2 THEN '帐号配置'
WHEN 3 THEN '按键绑定'
WHEN 4 THEN '宏命令'
END AS 缓存类型,
FROM_UNIXTIME(time) AS 更新时间,
LENGTH(data) AS 数据大小
FROM character_account_data
WHERE guid = 1
ORDER BY type;清除角色的UI配置(修复UI错误)
-- 清除角色1的宏命令(type=4)
DELETE FROM character_account_data WHERE guid = 1 AND type = 4;
-- 完全重置UI布局和配置(type=1)
DELETE FROM character_account_data WHERE guid = 1 AND type = 1;查找缓存数据异常大的角色
-- 找出宏命令数据过大的角色(可能有宏刷屏或配置错误)
SELECT c.name, cad.type, LENGTH(cad.data) AS 数据大小,
FROM_UNIXTIME(cad.time) AS 更新时间
FROM character_account_data cad
JOIN characters c ON c.guid = cad.guid
WHERE LENGTH(cad.data) > 50000
ORDER BY LENGTH(cad.data) DESC;常见问题
Q1: 如何让所有角色共享同一套宏命令?
魔兽世界的宏命令分为"通用宏"和"角色专用宏"。通用宏存储于 type=2(帐号配置),所有角色共享;角色专用宏存储于 type=4(宏命令缓存)。如需跨角色共享,在游戏内的宏编辑界面选择"通用宏"标签页创建。
Q2: 删除 character_account_data 中的记录安全吗?
安全,但要确保角色离线。删除后角色重新登录时客户端会使用默认UI配置。如果只删除特定 type 的记录,其他类型的配置不受影响。
Q3: data 字段可以手动修改吗?
不建议。data 是客户端序列化压缩的二进制数据,格式与客户端版本严格对应。手动修改很可能导致客户端崩溃或数据损坏。如需调整宏命令或UI设置,请通过游戏内界面操作。