回答:文本在大量DBMS中被弃用似乎更好,所以更好地使用blob或varchar的上限(和blob,你不会得到任何编码问题,这是一个主要的麻烦varchar和文本) 。
还如this thread at the MySQL forums指出,硬盘驱动器比软件便宜,所以你最好先设计你的软件,使它工作,只有当空间成为一个问题,你可能想优化这一方面。所以,不要尝试过度优化你的列的大小太早,更好地设置大小首先(加上这将避免安全问题)。
关于各种意见:
这里太多的SQL狂热。尽管事实上我非常喜欢SQL和关系模型,他们也有他们的陷阱。
将序列化数据按原样存储到数据库中(例如存储JSON或XML格式的数据)有以下几个优点:
>您可以为数据提供更灵活的格式:即时添加和删除字段,即时更改字段的规范等…
>与对象模型的阻抗不匹配:存储和获取数据就像在程序中一样,与获取数据相比,然后必须在程序对象的结构和关系数据库的结构之间进行处理和转换。
还有更多的其他优势,所以请没有狂热主义:关系数据库是一个伟大的工具,但让我们不管其他工具,我们可以得到。更多的工具,更好。
至于一个具体的使用示例,我倾向于在我的数据库中添加一个JSON字段来存储记录的额外参数,其中JSON数据的列(属性)将不会被单独选择,而只在正确的记录已经选择。在这种情况下,我仍然可以用关系列区分我的记录,并且当选择正确的记录时,我可以使用额外的参数为任何我想要的目的。
所以我的建议是保持两者的优势(速度,可串行化和结构的灵活性),只是使用几个标准的关系列作为唯一键来区分行,然后使用一个blob / varchar列,其中序列化数据插入。通常,唯一的密钥只需要两个/三列,因此这不会是一个主要的开销。
此外,您可能感兴趣的PostgreSQL现在有一个JSON数据类型,PostSQL project直接处理JSON字段作为关系列。