【问题标题】:Storing text in db: how to choose varchar size (considering formatting), storing formatting separately?在db中存储文本:如何选择varchar大小(考虑格式),单独存储格式?
【发布时间】:2012-05-26 00:04:08
【问题描述】:

如何最好地为(mysql)数据库中的 varchar/text/... 列选择大小(假设用户可以在文本区域中键入的文本最多为 500 个字符),考虑到用户还可能会使用格式(html/bb 代码/...),这对用户不可见并且不应该影响最大 500 个字符的文本大小...??

1) 理论上,为了防止任何错误,varchar 大小必须几乎是无限的,如果用户例如使用 20 个这样的链接(http://[huge number of chars])或其他任何... - 或不?

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

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

(php/mysql, java script, jquery)

非常感谢您!

【问题讨论】:

  • 这可能是错误的,但根据我的经验,当存储任何您知道“可能”超过您的思维限制的内容时,请将其设置为text。
  • @Gavin:谢谢,刚刚我读到text 比varchar 慢,至于文本mysql 必须执行行读取(见forums.mysql.com)
  • 如果是这种情况,那么您必须依靠第三方解决方案来防止用户使用超过 xx 个字符。出于全文搜索的目的,我能想到的唯一解决方案是将普通内容存储在一列中,并将文本存储在另一列中而不进行任何格式化。
  • @Gavin:好的,谢谢 Gavin! :)
  • @Chris Slower 什么?什么是“较慢”和什么是“较快”通常会根据您的使用模式而变化。我不是 MySQL 如何存储 BLOB 的专家,但 DBMS 必须将它们部分或完全存储在行之外,这实际上会使行更窄,加快不接触 BLOB 的操作。

标签: php database validation database-design input


【解决方案1】:

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

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

在一个表中保留两次相同的数据不是一个好的解决方案,这完全取决于您的项目,但通常更好的是在 php 上进行过滤器格式化。

【讨论】:

  • 是的,谢谢 ShaaD。限制格式化字符的数量是个好主意。您有任何想法如何最好地将其付诸实践吗?我只需要非常基本的功能(如a href、bold、italic),所以我不知道是否使用 3rd 方所见即所得编辑器,因为它只会增加很多复杂性和不可预见的问题,可能需要定期更新等。您建议如何解决这个问题?
  • 您可以使用 BBcodes,php 有一个很好的类可以使用它们。在客户端足以使按钮将所选文本包装成标签。
猜你喜欢
  • 1970-01-01
  • 2010-12-22
  • 2011-09-28
  • 1970-01-01
  • 1970-01-01
  • 2018-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多