📋 表概述

characters_money 表是一个日志/审计表,记录角色金币的每次变动。虽然 characters 表中有 money 字段存储当前余额,但该表提供了历史变化记录,便于追踪金币流水和异常检测。

📊 表结构

字段名数据类型默认值说明
guidint UNSIGNED0角色唯一标识,关联 characters.guid
moneyint UNSIGNED0当前铜币余额(单位:铜币)
datedateNULL记录日期
执行时间datetimeCURRENT_TIMESTAMP记录插入的精确时间戳

🔍 重要字段详解

money — 金币余额

存储角色当前的金币余额,单位为铜币。WoW 中 1 金币 = 100 银币 = 10000 铜币。例如 123456 铜币 = 12 金 34 银 56 铜。该值对应 characters.money 字段的快照。

执行时间 — 记录时间戳

这是一个中文命名的特殊字段,存储记录写入的精确 datetime 时间戳。用于追踪金币变动发生的具体时间,方便日志审计。

💡 SQL查询示例

查询某个角色最近的10条金币变动记录

SELECT guid,
       CONCAT(FLOOR(money / 10000), '金 ',
              FLOOR((money % 10000) / 100), '银 ',
              (money % 100), '铜') AS 金币,
       date, `执行时间`
FROM characters_money
WHERE guid = 12345
ORDER BY `执行时间` DESC
LIMIT 10;

统计今日金币变动总额前的10个角色

SELECT guid, MAX(money) - MIN(money) AS 变动铜币,
       CONCAT(FLOOR((MAX(money) - MIN(money)) / 10000), '金') AS 变动金币
FROM characters_money
WHERE DATE(`执行时间`) = CURDATE()
GROUP BY guid
HAVING 变动铜币 > 0
ORDER BY 变动铜币 DESC
LIMIT 10;

❓ 常见问题

Q: 这个表和 characters.money 字段有什么区别?

characters.money 存储的是角色的当前实时金币余额,只有一个值。characters_money 是日志表,记录了每次余额变动的快照,可用于审计和历史查询。

Q: 为什么 money 是铜币单位?

这是 WoW 游戏内部的存储惯例。铜币是最小单位,使用整数存储避免了浮点数精度问题。显示时除以 10000 得到金币数。