2011-04-11 34 views
0

我有一種情況,我必須動態地創建表。根據一些標準,我將改變特定表格的列的大小。
爲此,我需要計算一行的大小。公式計算MySql單行大小(引擎MyISAM)

例如 如果我要創建一個下表

CREATE TABLE sample(id int,name varchar(30));

因此,考慮到在mysql表中存儲行的所有開銷,公式會給出上表中單個行的大小。

有可能這樣做,這樣做是否可行?

+0

請也寫**爲什麼**你需要它,所以我們可以爲你的問題提供更好的解決方案。 – vbence 2011-04-11 07:15:05

+0

其實,我正在爲「調查管理」創建一個業餘愛好項目,因爲我可以選擇幾乎等於2000-3000的問題,並且每個調查的問題可以大於4096,我們希望將它作爲單行答覆表。 – 2011-04-11 07:33:29

+0

我根據你的評論編輯了我的答案。 – vbence 2011-04-11 08:33:07

回答

2

這取決於使用存儲引擎,並選擇該表的行格式,也是你的索引。但它不是一個非常有用的信息。

編輯:

我建議去反對正常化只有當你確切地知道自己在做什麼。 DBMS被創建來處理大量的數據。您可能不需要將您的結構化數據序列化到單個字段中。

請記住,您的應用程序層必須標記(或更糟糕的)序列化的字段數據才能獲得原始含義,這比從數據庫獲取結構化形式的數據開銷要大得多。

我能想到的唯一可以解決的問題是客戶端的架構,當將處理移動到客戶端時實際上會將服務器的負擔減輕,並且爲了傳輸的目的您會序列化我們的數據。 - 在服務器端代碼(如php)中,將序列化stye數據保存到數據庫中並不是一件好事。

(雖然,使用PHP內置的序列化可能會在某些情況下是個好主意。您當前的項目似乎並沒有從中受益。)

0

的VARCHAR是一個可變長度的數據類型,它有一個長度屬性,但值可以爲空;計算可能不準確。查看information_schema中的'Avg_row_length'字段。 tables