Firebird中主键的最大大小是多少?

时间:2009-12-23 16:09:36

标签: database-design primary-key firebird

我需要将一个Varchar(255)字段设置为Firebird 2.1中数据库表的主键。

我收到错误消息,指出字段大小太大。我使用UTF8作为我的字符集,默认页面大小为4096.

可以在Firebird中执行此操作吗?我需要确保此列是唯一的。

3 个答案:

答案 0 :(得分:8)

如上所述,最大密钥大小是页面大小的1/4,但是从Firebird参考更新(here)开始,最大可索引字符串长度(以字节为单位)比最大密钥长度小9。 Firebird中的UTF8内部存储为4 Bytes/char

因此,4096页大小的数据库中UTF8的最大长度为253个字符(4096/4 -9 = 1024 -9 = 1015,限制为253 * 4 = 1012)。因此,如果你想要一个更大的字符串,你需要一个更大的页面大小的数据库(即使你使用的是Firebird 2.5.x)。

答案 1 :(得分:1)

根据FirebirdFAQ,Firebird 2.x中的最大密钥大小是页面大小的四分之一。如果页面大小为4096字节,则最大密钥大小为1024字节 UTF8 varchars为每个字符保留一个完整的32位,即使它可能占用更少的空间。因此,UTF8中的varchar(255)是1020个字节。我不知道为什么它会达到极限,但无论如何我会增加页面大小或尝试varchar(254)。

答案 2 :(得分:0)

只需创建gstat d:\ path \ database.fdb

你的索引会得到这样的东西:

> Index CLIENT_IDX (2) 
>         Depth: 3, leaf buckets: 545, nodes: 138523 
>         Average data length: 10.12, total dup: 13873, max dup: 645 
>         Fill distribution: 
>              0 - 19% = 0 
>             20 - 39% = 0 
>             40 - 59% = 0 
>             60 - 79% = 0 
>             80 - 99% = 545

如果深度超过3:您将不得不增加页面大小。 它与Douglas Tosi说的相同。

您可以在IBExpert full editionIBAnalist

等工具中看到这一点