📋 表概述

account_data 表用于存储账号级别的持久化数据,这些数据不区分角色,对所有该账号下的角色都有效。包括账号级别的界面设置、按键绑定、宏命令、插件配置等。type 字段区分不同类别的数据。

📊 表结构

字段名数据类型默认值说明
accountIdint UNSIGNED0账号ID,关联 auth.account.id
typetinyint UNSIGNED0数据类型:0=全局缓存, 1=绑定, 2=宏, 3=布局, 4=聊天等
timeint UNSIGNED0数据最后修改的 Unix 时间戳
datablob(无)压缩后的二进制数据

🔍 重要字段详解

type — 数据类型

区分存储的不同类型账号数据。常见值:0(GLOBAL_CACHE_MASK)= 全局缓存,1(PER_CHARACTER_CACHE_MASK)= 按键绑定,2= 宏命令,3= 界面布局,4= 聊天设置。每个 type 对应一种独立的配置数据。

data — 二进制数据

存储压缩后的二进制数据(blob),由客户端序列化后传给服务端保存。服务端不做解析,只在客户端请求时原样返回。数据通常经过 zlib 压缩以节省存储空间。

💡 SQL查询示例

查询某个账号保存了哪些类型的数据

SELECT accountId, type, FROM_UNIXTIME(time) AS 最后修改时间,
       OCTET_LENGTH(data) AS 数据大小字节
FROM account_data
WHERE accountId = 100;

查看账号数据占用存储空间最多的前10个账号

SELECT accountId,
       SUM(OCTET_LENGTH(data)) AS 总大小,
       COUNT(*) AS 记录数
FROM account_data
GROUP BY accountId
ORDER BY 总大小 DESC
LIMIT 10;

❓ 常见问题

Q: account_data 和 character_settings 有什么区别?

account_data 存储的是账号级别的配置(跨所有角色),例如按键绑定通常是账号共享的。character_settings 存储的是特定角色的配置(如某个角色的动作条布局)。

Q: data 字段内容可以查看吗?

data 是压缩的二进制数据,直接查看会显示乱码。需要解压和反序列化才能阅读。可以通过游戏客户端正常读取和修改这些数据。