创建表时,PSQL v9 中的记录长度如何受到影响?

How is the record length affected in PSQL v9 when creating tables?

我正在使用 Btrieve 和 Pervasive SQL 控制中心来创建 table。 table 有 3 列:char 20、char 20 和 char 50。第一列是主键。当我通过代码插入一条记录时,第二列的第一个字符总是丢失。我假设是因为第一列正在覆盖它。在调查为什么我加载文件信息编辑器时。文件规范将记录长度列为 92。这对我来说没有意义,因为我明确将 table 定义为记录长度为 90。

我也遇到了错误 22,这表明代码中缓冲区的记录长度与实际 table 记录长度不同。

为了修复第二列中缺少的第一个字符,我更改了代码中的缓冲区,使第一列的长度为 21 个字符。我还将第 3 列更改为 51 以修复错误 22.

当我在创建 table 时明确将记录长度定义为 90 时,如何将记录长度设置为 92?

您最有可能看到的是 Btrieve / Pervasive 中 "null" 处理的产物。
当您使用 Btrieve 创建文件时,您可以精确地逐字节排列记录。当 "True Null" 支持添加到 Pervasive 引擎时,任何创建为可空(默认)的列都有一个额外的字节作为 Btrieve 文件中字段的前缀。这允许引擎知道字段是否为 null 或空字符串。
因为你的 table 有三列,所以应该有三个额外的字节,但因为其中一列是主键,它并不全是空的,所以你只有两个额外的字节。
在您的情况下,如果您有一个现有的 Btrieve 文件并创建了 SQL 定义,那么在某些情况下这些额外的字段将不会存在。
您有两个选择:

  • 重新创建 table 并关闭 "True Null" 支持。这是通过在 Create Table 命令之前发出 Set TrueNullCreate = Off 命令来完成的。

  • Not Null 添加到 table 中的所有列并重新创建 table。