0

我在尝试从 .MYD 文件中读取数据时遇到了一些问题。我正在开发一个需要直接从文件中读取数据的软件。我设法正确阅读了 .frm,但我在 .myd 上苦苦挣扎。

我从内部手册( https://dev.mysql.com/doc/internals/en/myisam.html )中阅读了几乎所有信息,并且还阅读了理解 MyISAM 记录结构

所以,我想知道,怎么可能知道数据属于哪一列。我的数据主要是使用动态文件格式的 mediumblob,我知道 blob 的长度有 3 个字节,然后是数据本身。例如,如果我有 10 列,但其中只有 2 列包含数据,我们如何知道哪一列包含 .myd 文件中的数据?

我无法解释记录标题和标志。

谢谢你。

4

1 回答 1

0

每条记录都包含一个标志。每个标志包含位,每个字段一个。

如果位值为0:它包含数据。如果位值为 1:则为空。

如果表包含 15 个字段,则标志将是 2 个字节。15 位,每个字段一个,一个填充位。

例如,如果您有 8 个字段并且您有标志:FA

位:01111010

根据字节顺序(在我的情况下),您必须从最后开始。因此,在此示例中,对于此记录,第 1、第 3 和第 8 个字段将包含数据,其他字段将为空。

另外,我发现这个文档:https ://github.com/twitter/mysql/blob/master/storage/myisam/mi_dynrec.c#L1890非常有用。在第 1890 行,它显示了如何读取每个块类型以及哪个块类型包含标志。

于 2016-09-02T14:28:16.643 回答