所有
我正在编写一个可以接收用户生成的文本内容的网络应用。其中一些输入将是几个单词,有些将是几句长。在超过90%的情况下,输入将少于800个字符。 输入需要可搜索。输入将包含各种字符集,包括亚洲字符集。站点和数据库基于utf8。
我大致了解VARCHAR和TEXT之间的权衡。我想象的是同时拥有一个VARCHAR和一个TEXT表,并根据它们的大小在一个或另一个上存储输入(这应该可以通过PHP脚本来实现)。
您如何看待基于数据的数据表?另外,为各种大小范围创建几个VARCHAR表是否有意义?我的猜测是,我将获得围绕几个密钥大小聚集的大量用户输入。
谢谢,
JDelage
答案 0 :(得分:5)
根据输入的大小将值存储在一列与另一列中,这将增加应用程序的复杂性,而不是它的价值。
对于MySQL中的VARCHAR vs TEXT,这里有一个很好的讨论,MySQL: Large VARCHAR vs TEXT。
“棘手”部分是在这个字段上进行全文搜索,这需要使用MyISAM存储引擎,因为它是唯一支持全文索引的引擎。另外值得注意的是,有时以使系统架构复杂化为代价,使用像Apache Solr这样的东西可能是值得的,因为它可以更有效地执行全文搜索。很多人在他们的MySQL数据库中拥有大部分数据,并使用像Solr这样的文本列进行全文索引,然后使用该索引进行花哨的搜索。
Re:Unicode。我已经使用Solr对带有Unicode字符的文本进行全文索引。
答案 1 :(得分:4)
评论是正确的。您只使用VARCHAR上的TEXT数据类型添加1个字节。
存储要求:
答案 2 :(得分:1)
我看到它的方式是你有两个选择:
A_LOT_OF_TEXT
的附加表,其结构为(int row_id_of_varchar_table,TEXT)。如果数据足够小,则将其放在varchar中,否则放置预定义的值而不是数据,例如'THE_DATA_YOU_ARE_LOOKING_FOR_IS_IN_TABLE_NAMED_A_LOT_OF_TEXT'或只是NULL并将实际数据放到表A_LOT_OF_TEXT
。