提问



我正在使用Rails创建一个新的Web应用程序,并且想知道,stringtext之间的区别是什么?什么时候应该使用?

最佳参考


差异依赖于如何在查询语言中将符号转换为其各自的列类型。



  使用MySQL:字符串映射到VARCHAR(255)
   - http://guides.rubyonrails.org/migrations.html [12]



:string |                   VARCHAR                | :limit => 1 to 255 (default = 255)  
:text   | TINYTEXT, TEXT, MEDIUMTEXT, or LONGTEXT2 | :limit => 1 to 4294967296 (default = 65536)


参考:



  http://www.packtpub.com/article/Working-with-Rails-ActiveRecord-Migrations-Models-Scaffolding-and-Database-Completion[13]



何时应该使用?


作为一般经验法则,使用:string进行短文本输入(用户名,电子邮件,密码,标题等),并使用:text进行更长期望的输入,如描述,评论内容等。

其它参考1


如果你正在使用postgres使用文本,除非你有一个大小约束,因为text和varchar没有性能损失



  这三种类型之间没有性能差异,除了使用空白填充类型时增加的存储空间,以及一些额外的CPU周期来检查存储到长度受限列中的长度。虽然character(n)在其他一些数据库系统中具有性能优势,但PostgreSQL中没有这样的优势;事实上,由于额外的存储成本,字符(n)通常是三者中最慢的。在大多数情况下,应使用文本或字符变化



PostsgreSQL手册[14]

其它参考2


String转换为数据库中的Varchar,而文本转换为text。 varchar可以包含更少的项目,文本可以(几乎)任何长度。


有关参考资料的深入分析,请查看http://www.pythian.com/news/7129/text-vs-varchar/[15]


编辑:有些数据库引擎可以一次加载varchar,但是将文本(和blob)存储在表格之外。使用text作为name时,SELECT name, amount FROM products可能比使用varchar时慢得多。而且由于Rails默认情况下会加载带SELECT * FROM...的记录,因此将加载您的文本列。这可能永远不会成为您或我的应用程序中的真正问题(过早优化是......)。但是知道文本并不总是免费是很好的。

其它参考3


如上所述,不仅仅是db数据类型,它还会影响在脚手架中生成的视图。
string会生成一个text_field文本,会生成一个text_area

其它参考4


字符串,如果大小固定,小,文本,如果它是变量和大。
这很重要,因为文本比字符串大。它包含更多的千字节。


因此对于小字段总是使用字符串(varchar)。字段如。 first_name,登录,电子邮件,主题(文章或帖子)
和文本的例子:帖子或文章的内容/正文。段落的字段等


字符串大小1到255(默认值= 255)


文字大小1至4294967296(默认= 65536)2

其它参考5


使用字符串作为较短的字段,如姓名,地址,电话,公司


将文本用于更大的内容,评论,内容,段落。


我的一般规则,如果它是超过一行的东西,我通常会选择文本,如果它是一个短的2-6个单词,我会选择字符串。


对于字符串,官方规则是255。因此,如果您的字符串超过255个字符,请转到文本。