跳转至

数据表字段详细说明

本文档详细说明快手聊天数据库中各个表的字段含义、数据类型和示例数据。

由于未在其他表内找到有价值的信息,故忽略,被忽略的表详见数据库结构详解
如果你在被忽略的表找到了有用的信息请反馈

由于使用了AI来进行分析,很多都是根据名字意淫的,可能含有大量错误,欢迎指正

仅分析如下表

原序号 表名 (Table Name) 类型
10 kwai_conversation 核心
12 kwai_group_info 群组
13 kwai_group_member 群组
15 kwai_message 核心

kwai_conversation 表字段说明

功能:存储会话列表数据(即快手 App “消息”页面展示的列表)。
核心作用:定义了你和谁(User/Group)在聊天,以及最后一条消息的时间、未读数等状态。

严格按照原数据库顺序排序

序号 字段名 (Column) 类型 样本值示例 猜测含义(不保证完全正确)
1 _id INTEGER 1, 24 主键 ID。可能为本地数据库自动生成的自增序号,无业务含义。
2 subBiz TEXT 0 子业务类型。通常为 0,预留字段。
用途未知
3 target TEXT 2828307026
RECRUIT
1
会话目标 ID (核心字段)。对应用户的 ID、群 ID 或系统账号(如 MERCHANT 小店),用于关联消息表。
4 targetType INTEGER 0,4,6,8 会话类型
0: 私聊 (Private)
4: 群聊 (Group)
6/8: 官方/系统号 (System)
5 unreadCount INTEGER 0, 17 未读消息数。显示在会话列表上的红点数字。
6 updatedTime INTEGER 1740659171569 最后更新时间。13位毫秒级时间戳。用于列表排序,决定谁排在最上面。
7 priority INTEGER 0, 50 置顶优先级
0: 普通会话
50: 置顶会话 (Top)
8 weightFactor INTEGER 0 权重因子。可能为内部排序算法使用的辅助权重,一般为 0。
用途未知
9 categoryId INTEGER 0,1,2 分类 ID。可能用于区分会话类别。
用途未知
10 lastContent BLOB (protobuf) 最后一条消息概览。存储二进制数据(Protobuf),显示为乱码或符号。不建议直接解析,请查消息表。
11 accountType INTEGER 0 账号类型。可能用于区分普通账号或企业账号等。
有待分析
12 jumpCategoryId INTEGER 0 跳转分类 ID。可能为APP 内部跳转逻辑使用的 ID。
有待分析
13 draft TEXT (null) 草稿内容
可能是未发送的草稿内容?
有待分析
14 targetReadSeqId INTEGER 1737255126449453
0
对方已读序列号。用于判断对方读到了哪一条消息
部分为0
15 reminder BLOB (特殊字符) 提醒标识。用于存储 "@我" 或其他强提醒的元数据,通常是二进制字符和null。
用途未知
16 importance INTEGER 0 重要性标记。可能用于折叠低优先级消息。
有待分析
17 mute INTEGER 0, 1 免打扰状态
0: 正常通知
1: 开启免打扰 (Mute)
18 muteType INTEGER 0,1,2,3 免打扰具体类型
有待分析
19 unreadRemindCountMap TEXT 非null空 未读提醒映射。记录特殊类型的未读数结构。
有待分析
20 status INTEGER 0 会话状态。可能涉及会话是否被删除或隐藏。
有待分析
21 extra BLOB (null)或二进制 扩展字段。存储额外的业务数据。
用途未知
22 receive_status INTEGER 0 接收状态。是否拒收消息等状态位。
有待分析
23 mark_unread INTEGER 0 手动标记未读
0: 否
1: 用户手动标为未读。
24 mutedUnreadCount INTEGER 0 免打扰未读数。开启免打扰后的未读消息数量。
25 serverExtra BLOB (null)或二进制 服务端扩展信息。从服务器同步下来的额外标记。
用途未知
26 bizUnreadCount INTEGER (null) 业务未读数。特定业务场景的计数。
有待分析
27 bizUnreadRemindCountMap TEXT 非null空 业务提醒映射
有待分析
28 bizReadSeqId INTEGER 1736831781059416 业务已读序列号
有待分析
29 hasDraft INTEGER 0, 2 无法与draft字段关联
用途未知

kwai_group_info 表字段说明

表名kwai_group_info
功能:存储群组的元数据(群名称、公告、群主、群成员概览等)。
排序依据:严格按照原顺序排列。

序号 字段名 (Column) 类型 样本值示例 详细说明
1 groupId TEXT 400737228
339680344
群组 ID (核心)。用于关联 kwai_message 表中的 target 字段,以及 kwai_group_member 表。
2 appId INTEGER 26 应用 ID。固定为 26,代表快手APP。
3 groupName TEXT
粉丝群
群名称。聊天界面顶部的群名字。部分群可能为空,需用 defaultGroupName 兜底。
4 masterId TEXT 3402398096 群主 ID。群拥有者的用户 ID。
5 groupStatus INTEGER 1, 2 群状态
1: 正常
2: 可能被解散
6 description TEXT "禁止刷屏..." 群公告。群规、介绍等文本内容。
7 joinPermission INTEGER 1, 2 加群权限
1: 直接申请加入
2: 需要审核?
8 invitePermission INTEGER 1 邀请权限
1: 允许成员邀请
2不允许邀请新成员?
9 createTime INTEGER 1717513387273 创建时间。13位毫秒级时间戳。
10 lastUpdateTime INTEGER 1737308639310 最后更新时间。群信息变更的时间。
11 groupType INTEGER 3, 4 群类型
3: 私信群(100人)
4: 公开大群(200/500人)
12 forbiddenState INTEGER 1 全员禁言状态
1: 未开启全员禁言
13 antiDisturbing INTEGER 0 防打扰模式
有待分析
14 memberCount INTEGER 14, 148 当前成员数。群里现在有多少人。
15 maxMemberCount INTEGER 100, 200, 500 最大成员数。群人数上限。
16 maxManagerCount INTEGER 5, 15 最大管理员数
17 nickName TEXT (群昵称) 我的群昵称。我在本群的昵称(如果未设置则为空)。
18 onlyAdminRemindAll INTEGER 0 仅管理员可@全体
全部为0
19 onlyAdminUpdateSetting INTEGER 0 仅管理员改设置
全部为0
20 inviterUid TEXT 2856147173 邀请人 ID。谁拉你进群的。
21 role INTEGER 1, 2 我的角色
1: 普通成员
2: 群主
3:管理员
22 joinTime INTEGER 1720261363035 入群时间。我加入该群的时间戳。
23 extra TEXT {"originName"..."} 扩展信息。JSON 格式,包含创建时是否跳过审核,原始群名、原始头像。
24 tag INTEGER 101, 102, 202, 302 群标签 ID
用途未知
25 groupNumber TEXT K339680344351 群号。用户搜索加群时显示的对外群号(以 K 开头)。
26 introduction TEXT (见样本) 群简介。有的没有
27 groupHeadUrl TEXT ks://...png/6 群头像 URL。快手 CDN 链接,通常以 ks:// 开头,需替换为 http 协议才能访问。
28 defaultGroupName TEXT 无名、快手用户xxx... 默认群名。当 groupName 为空时,快手会自动拼接前几个群成员的名字作为群名。
29 groupNamePY TEXT (见数据) 群名拼音
下面这些数据都好猎奇。。。
30 groupNameAbbr TEXT (见数据) 群名缩写
31 defaultGroupNamePY TEXT (见数据) 默认群名拼音
32 defaultGroupNameAbbr TEXT (见数据) 默认群名拼音首字母
33 groupNameOpt TEXT (见数据) 群名操作标记
34 groupNamePinYinOpt TEXT (见数据) 群名拼音操作
35 groupNameAbbrOpt TEXT (见数据) 群名缩写操作
36 groupBackNameOpt TEXT (见数据) 群备注名操作
37 groupBackNamePinYinOpt TEXT (见数据) 群备注名拼音操作
38 groupBackNameAbbrOpt TEXT (见数据) 群备注名缩写操作
39 location TEXT {"latitude":""...} 位置信息。JSON格式,包含位置信息。
40 memberStatus INTEGER 2, 1, 4 成员状态
用途未知
41 isMuteAll INTEGER 0 是否全员禁言
42 canTalkUsers TEXT (空) 白名单用户。禁言模式下可发言的人。
43 keepSilenceUsers TEXT (空) 黑名单用户。被单独禁言的人。
44 topMembers TEXT 3402...,2843... 前几个成员 ID 列表。前几位成员 ID,用于生成默认群名。
45 multiForbiddenState TEXT (空) 多重禁言状态
有待分析
46 managerId TEXT null 管理员 ID 列表
47 groupLabelIds TEXT null 群标签 ID 列表
48 inviteNeedUserAgree INTEGER 0 邀请需用户同意
49 multiForbiddenStates TEXT 0, 2, 4 群聊封禁状态码
0为正常,2,3未知 4为封禁
有待分析
50 groupExtraSetting TEXT 0,32,48 群额外设置
用途未知

  1. 群名称显示逻辑:

    • 解释:很多群没有显式命名,此时一定要用 defaultGroupName (也就是那一串成员名字拼接),否则用户看到全是空名字。*
  2. 头像处理:

    • 数据库里的头像链接是 ks:// 协议(如 ks://edmrred9...)。
    • 在导出为 HTML/JSON 时,通常需要将其转换为 http://https://,或者使用快手的 CDN 域名(需要抓包确认域名)。
  3. 群号 vs ID:

    • groupId: 数据库内部用的唯一 ID,全是数字。
    • groupNumber: 用户可见的群号,带 K 前缀。导出时建议展示 groupNumber 方便用户搜索。
  4. 成员管理:

    • 虽然这里有 topMembers,但它不全。要获取完整的群成员列表和昵称,必须去查 kwai_group_member 表,用 groupId 关联。

kwai_group_member表字段说明

表名kwai_group_member 功能:存储群成员信息,用于建立“用户 ID”到“群昵称”的映射。

序号 字段名 (Column) 类型 样本值示例 详细说明
1 ID TEXT 26_407148103_2715213950 主键 ID。格式为 AppID_GroupId_UserId,由这三者拼接而成的唯一标识。
2 groupId TEXT 407148103 群组 ID。关联 kwai_group_info 表。
3 appId INTEGER 26 应用 ID。固定为 26。
4 userId TEXT 2715213950 用户 ID。群成员的个人账号 ID。用于关联 kwai_message 中的 sender
5 nickName TEXT (空) / 群昵称 群昵称。该用户在本群显示的昵称。如果为空,则显示用户原本的快手名。
6 joinTime INTEGER 1724940871001 入群时间。13位毫秒级时间戳。
7 status INTEGER 1,2,3,4 成员状态
用途未知
8 invitedUserId TEXT 2856147173 邀请人 ID。是谁把这个用户拉进群的。
9 antiDisturbing INTEGER 0 防打扰状态
0: 关闭?
有待分析
10 createTime INTEGER 1724940871001 记录创建时间。通常等于 joinTime
11 updateTime INTEGER 1720342293463 最后更新时间。修改昵称或权限变更的时间。
12 silenceDeadline INTEGER 0 禁言截止时间
有待分析
13 role INTEGER 1, 2, 3 群内权限
1: 普通成员 (Member)
2: 群主 (Owner)
3: 管理员 (Admin)
14 nickNameOpt TEXT (见数据) 昵称搜索优化。用于本地搜索匹配,存储了昵称的所有后缀子串。
15 nickNamePinYinOpt TEXT (见数据) 昵称拼音搜索。用于拼音首字母搜索。
16 nickNameAbbrOpt TEXT (见数据) 昵称缩写。用于首字母快速匹配。

kwai_message 表字段说明

这个表是所有表里信息量最大

功能:存储所有聊天记录的详细内容(气泡)。

序号 字段名 (Column) 类型 样本值示例 详细说明
1 _id INTEGER 17382086371200092 主键 ID。本地数据库生成的唯一标识。
2 subBiz TEXT 0 子业务。通常为 0。
有待分析
3 target TEXT 4561100593 会话 ID。如果是私聊,这里是对方 ID;如果是群聊,这里是群 ID。用于关联 kwai_conversation
4 targetType INTEGER 0, 4 会话类型
0: 私聊
4: 群聊
5 sender TEXT 3440988052 发送者 ID。谁发的消息。如果是你发的,就是你自己的 ID。
6 seq INTEGER 1736678568014004 消息序列号。服务器端生成的唯一且递增的序列号。
7 clientSeq INTEGER 17366795434760424 客户端序列号。本地生成的消息唯一 ID。
8 sentTime INTEGER 1736679543510 发送时间 (核心)。13位毫秒级时间戳。用于展示消息时间。
9 msgType INTEGER 0, 2, 13006 消息类型 (核心)
详情见文档消息类型
10 readStatus INTEGER 0 已读状态。本地是否已读。
有待分析
11 outboundStatus INTEGER 0 发送状态
0 代表发送成功
1 发送中
2 发送失败
-1 草稿 (Draft)
12 text TEXT 你好 简略文本。简单的文本消息会直接存在这里,但复杂的(如图片、卡片)这里为空或乱码。
13 unknownTips TEXT [功能内测中] 降级提示。当 APP 版本过低无法解析消息时显示的提示文本。
14 placeHolder TEXT (null) 占位符
用途未知
15 contentBytes BLOB {"remind_body":...} 消息体 (核心)
这里存放了最完整的消息内容Protobuf 格式,包含了图片 URL、富文本结构等。
16 impactUnread INTEGER 1 是否计入未读数
1: 计入
0: 不计入 (如系统撤回提示)
17 priority INTEGER -1 优先级
有待分析
18 categoryId INTEGER 0 分类 ID
有待分析
19 accountType INTEGER 0 账号类型
有待分析
20 localSortSeq INTEGER 1736678568014004 本地排序序列号
有待分析
21 reminders TEXT {"remind_body":"[]"} 提醒信息。json格式,可能用于存储 @ 某人的信息。
有待分析
22 extra BLOB (二进制数据) 扩展信息。可能存储一些元数据。
用途未知
23 localExtra BLOB (二进制数据) 本地扩展信息
用途未知
24 receipt INTEGER 0 回执状态
有待分析
25 createSession INTEGER 0, 1 是否创建会话
有待分析
26 forward INTEGER 0 是否为转发消息
有待分析
27 attachmentFilePath TEXT (null)或路径 附件本地路径。如果是自己发送的图片,这里可能有本地文件的绝对路径。
28 createTime INTEGER 0或时间戳 创建时间。通常为 0,以 sentTime 为准。
29 realFrom TEXT (null) 真实发送者。可能用于代发消息场景。
有待分析
30 invisibleInConversationList INTEGER 0 列表不可见
有待分析
31 previousReplaceSeq INTEGER 0 上一条被替换的消息 seq。用于消息编辑/撤回逻辑。
32 searchableContent TEXT 好的,感谢... 可搜索内容。用于本地搜索的纯文本索引,内容比 text 更全,解析文本消息时优先读这个
33 ftsRowId INTEGER 44827... 全文搜索索引 ID
34 isLocalMsg INTEGER 0 是否为本地消息
0: 从服务器拉取
1: 本地产生

由于快手使用了多种字段来存储内容,建议按以下优先级进行解析:

  • 文本消息 (Text):

    • 优先读取 searchableContent。这个字段通常包含了干净的文本内容,且不包含 XML 标签。
    • 如果 searchableContent 为空,再读取 text
    • 注意:contentBytes 里有很多乱码和 XML 结构 (<a href=...>),那是原始格式,解析起来比较麻烦,直接用 searchableContent 更方便。
  • 图片/表情包 (Image/Sticker):

    • 字段contentBytes
    • 解析方法contentBytes 里包含了 http://...jpgwebp 的链接。
      对于ks://开头的链接需要在前面加上快手的cdn。
    • 特征msgType 通常为 1 (图片) 或 1014 (表情包?)。
  • 系统消息 (System):

    • 特征msgType = 200sender = 9223372036854775807 (这是 Java Long 的最大值,代表系统)。
    • 内容:如 群主已解散群撤回了一条消息。这些内容通常直接存在 textsearchableContent 中。

如何关联“我是谁”

kwai_message 表中,并没有字段明确标记“我是发送者”。你需要结合 sender 字段: * 在解析之前,你需要知道当前登录用户的 ID(也就是数据库文件名的那串数字)。 * 如果 sender 等于当前用户uid就是自己发的,否则就是对方发的。

msgType详解请看消息类型