2009-12-23 74 views
5

我需要設置一個Varchar(255)字段作爲Firebird 2.1中數據庫表的主鍵。Firebird中主鍵的最大大小是多少?

我收到錯誤消息,指出字段太大。我正在使用UTF8作爲我的字符集,默認頁面大小爲4096.

在Firebird中可以這樣做嗎?我需要確保這一列是唯一的。

+0

當您製作gstat時:您的主鍵上的索引深度是多少? – 2009-12-23 17:46:29

+0

我不確定「索引深度」是什麼意思。我以前沒有用過gstat。 – dthrasher 2009-12-23 22:02:44

+0

也許[這個線程](http://tech.groups.yahoo.com/group/firebird-support/message/98562)可以幫助你理解一個gstat回報。你應該閱讀[IBPhoenix站點](http://www.ibphoenix.com/resources/documents/design)中的Ann Harrison論文,以瞭解Firebird中的索引索引(: – EMBarbosa 2011-06-28 16:51:13

回答

8

正如所解釋的最大密鑰大小的頁面大小的1/4,但是從火鳥參考更新(here),以字節爲單位的最大的可轉位字符串長度比最大密鑰長度小9。 Firebird中的UTF8在內部存儲爲4 Bytes/char

因此,4096頁面大小的數據庫中UTF8的最大長度爲253個字符(4096/4 -9 = 1024 -9 = 1015,限制爲253 * 4 = 1012)。所以,如果你想要一個更大的字符串,你需要一個更大的頁面大小的數據庫(即使你使用的是Firebird 2.5.x)。

+0

啊,這解釋了它,我無法弄清楚爲什麼我錯過了幾個字節! – dthrasher 2011-06-29 01:54:47

1

根據FirebirdFAQ,Firebird 2.x中的最大密鑰大小是頁面大小的四分之一。如果您的頁面大小爲4096字節,則最大密鑰大小爲1024字節。
儘管UTF8變量可能佔用較少的空間,但它仍然會爲每個char保留一個完整的32位。因此UTF8中的varchar(255)是1020字節。我不知道爲什麼它達到了極限,但無論如何我會增加頁面大小或嘗試varchar(254)。

0

只是讓gstat d:\路徑\ 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

相關問題