2012-03-15 33 views
0

我有这个数据如何存储在SQL表中的单个列超过1项

searchterm=mobile 
frequency=43200 
catName=-1 
showNowPageSize=100 
showNowPageNumber=1 

对此我想在我SQL列保存“queryparams”

是这样可以节省整个数据在单个列中,如果是的话如何?在SQL中这个queryparams应该是什么,它会是varchar?

现在我得到这个异常:

数据截断:数据太长,列 'queryparams' 在行1

感谢

+0

好吧,显然你的列可能是类型的varchar,其长度小于你想要放入的长度。您必须将列大小设置为“blob”类型,然后我才会序列化您的数据。 (我不是java专家,所以我会把它留给他们) – 2012-03-15 08:15:35

回答

0

是的,但是您必须使柱子足够宽。尝试使用CLOB字段类型。只有这样才会在未来造成其他问题。

对于1:N问题(包含多个子节点的一个节点)的正确解决方案是使用外键。

与这些列ID, QUERY, INDEX, NAME, VALUE

INDEX是唯一必要的,如果你需要保存的查询参数的顺序创建一个表queryparamsQUERY列是外键:它是这些参数所属的查询节点的主键。

2

这是可能的,如果你序列将数据转换为字符串(例如JSON),但在我看来,这是不正确的,请使用数据库的功能并将数据分隔到不同的列(它应该在大多数情况下工作)

0

为什么不把它作为查询字符串存储在这种情况下。

"searchterm=mobile&frequency=43200&catName=-1&showNowPageSize=100&showNowPageNumber=1" 

只需将其存储在正常的varchar列中即可。但是,如果您需要基于这些值中的任何值进行查询,或者它们对于分析或数据挖掘目的有重要意义,则应将参数标准化为离散列或名称/值对表。

0

看来你似乎已经将你的列类型声明为一种不符合你的目的的类型。如果你真的想做你说的话,你应该使用更长的类型。然后使用分隔符(无论您需要),某些字符或字符序列在您的数据中是不可能的。但是,我看到@Binyamin Sharet,列并不意味着在一列中放置任何你认为是好的东西,你应该更好地使用几列来获取多个信息。越清洁越好,干净的设计提供了更好的改进机会和特征......即使它似乎与生产性和资本主义的短期方法不相容。

0

您可以制作一个对象/结构体并将其序列化为Blob字段。

相关问题