有问题的字符串将是(烹饪)食谱的描述字段,最大长度应该是99%的用户永远不会遇到的事情。 nvarchar(4000)似乎可能太有限了。
SQL表中的列是否适合此位置?在这样的字段中存储这样一个(可能)大的值是不对的,但也许不是吗?
不确定是否重要,但.NET 3.5很可能会使用LINQ2SQL。
编辑:使用VS Express数据库资源管理器创建表,它告诉我4000是nvarchar的最大大小(似乎没有列出varchar作为选项)。这仅仅是SQLCE的限制,并且表明我将不得不研究其他内容吗?
如果确实这是SQLCE的限制,是否有人有另一个推荐?对于宠物项目,我必须是免费的,最好是易于设置(最好是我和最终用户,但更重要的是,它很容易为最终用户设置)。数据库将是本地的,性能不是太大的问题。
答案 0 :(得分:5)
您是否对现有食谱进行过任何研究?一个varchar(4000)会给你大约400-500个单词,我很确定我的许多食谱中的很多食谱都没有比这更长的描述。
VarBinary会获得8000个字节,但是如果您要在描述字段中进行任何搜索,则使用varbinary可能需要强制转换或其他会导致性能损失的操作。
最后,虽然我不是特别喜欢这个,但您可以将描述规范化为不同的表格,这样您就可以设置一对多的关系,并使配方具有多个描述部分,您可以重新组合在界面中。
答案 1 :(得分:1)
不一定推荐,但提供是因为他们想到了:
如果文本在存储后很少被更改,您可以考虑创建一个存储文本“行”的新表,如:
recipe_id integer,
line_number integer,
line_text nvarchar(80)
或者,如果您不需要搜索配方的文本,那么简单的压缩算法呢? Huffman encoding在文本方面相当有效,而且CPU密集度不高。
答案 2 :(得分:0)
另一种方法是将文本保存为文件,数据库仅存储文件名。
答案 3 :(得分:0)
ntext是你最好的选择,因为它可以存储50万个字符,如果它太小,可以与其他解决方案结合使用,例如分割行可以使用。
https://technet.microsoft.com/en-us/library/ms172424.aspx
您应该记住,SQL compact的最大数据库大小为4GB,因此如果您打算存储大量这些记录,那么迁移到不同的数据库类型可能更好。
答案 4 :(得分:-1)
大多数SQL数据库足够智能,可以自动为大型VARCHARS和TEXT列执行此操作。创建行时,不是为大列分配空间,而是以这种方式存储每行的数据,这样它只占用比实际内容稍多的空间(而不是最大大小)。
答案 5 :(得分:-1)
我从未使用过SQL CE,但看看它是否支持VARCHAR(MAX)数据大小。基本上,它存储大量的文本(最多2GB)超出800K行大小限制的范围,但也允许使用'='和其他WHERE子句运算符(TEXT数据类型仅支持LIKE)。