2012-05-18 12 views
0

如何最好地为(mysql)数据库中的varchar/text/...列选择大小(让我们假设用户可以键入文本区域的文本应该是最多500个字符),考虑到用户也可能使用格式(HTML/BB代码/ ...),这是不可见的用户,不应该影响最大500字符文本大小...?在理论上,为了防止出现任何错误,如果用户(例如,用户)使用20个这样的链接(http:// [巨量字符])或其他... - 或不是?存储文本分贝:如何选择varchar大小(考虑格式),分别存储格式?

2)您应该/能否将格式保存在单独的列中,例如不给索引(如FULLTEXT)错误的值(包含在格式中但不包含在真实文本中的词)?

如果是的话,如何最好地做到这一点?你还记得使用格式的时候,保存这一点和格式,并在输出时把这些信息放在一起吗?

(的PHP/MySQL,Java脚本,jQuery的)

非常感谢你提前!

+2

这可能是错误的,但根据我的经验,当存储任何您知道“可能”长于您想要施加的限制的内容时,将其设置为“文本”。 – Gavin

+0

@Gavin:thx,只是我读了'text'作为'varchar'变慢了,至于文本mysql必须执行行读取(参见[forums.mysql.com](http://forums.mysql.com/read .php?24,105964,105984#msg-105984)) – Chris

+0

如果是这种情况,那么您必须依靠第三方解决方案来防止用户使用超过xx个字符。为了全文搜索的目的,我能想到的唯一解决方案是将常规内容存储在一列中,并将文本存储在另一列中而不用任何格式。 – Gavin

回答

0

一个好的解决方案是考虑格式化字符的数量。

如果您不这样做,为避免数据丢失,您需要在数据库上使用更多空间存储文本,并在保存或使用全文前检查先前记录的长度。

在一张表中保留相同的数据两次并不是一个好的解决方案,这一切都取决于你的项目,但通常更好的是它过滤器在PHP上格式化。

+0

是啊,谢谢ShaaD。限制格式化字符的数量是一个好主意。你有什么想法如何最好地把这个实践?我只需要非常基本的功能(比如'a href','bold','italic'),所以我不知道使用第三方所见即所得的编辑器,因为它只会增加很多复杂性和不可预见的问题,可能需要定期更新等。你会建议如何解决这个问题? – Chris

+0

你可以使用BBcode,PHP有一个很好的类与他们合作。在客户端足以让按钮将选定的文本包装成标签。 – ShaaD