2011-04-11 13 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