rails中字符串和文本之间的区别?

Mo.*_*Mo. 422 ruby-on-rails

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

TJ *_*ntz 514

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

使用MySQL:string映射到VARCHAR(255) - http://guides.rubyonrails.org/migrations.html

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

参考:

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

什么时候应该使用?

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

  • 对于MySQL - 不是那么多,你可以在varchars上有索引,你不能在文本上. (70认同)
  • PostgreSQL实现更喜欢文本.pg字符串/文本的唯一区别是字符串长度的约束.没有性能差异. (12认同)
  • 我认为更好的经验法则是始终使用`:text`.见http://www.depesz.com/2010/03/02/charx-vs-varcharx-vs-varchar-vs-text/ (11认同)

Oma*_*shi 154

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

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

PostsgreSQL手册

  • 可能是这样,但数据库不可知论是一个错误的先知. (13认同)
  • 有许多理由说明为什么它可能在现实世界中变得必要,在这里我们最好放弃对任何问题都有一个真正解决方案的观念. (6认同)
  • 你提出了一个很好的观点,但我并不完全相信.在博客文章中使用`text`而不是`(n)`数据类型的论点是令人信服的,但是使用`text`而不是`varchar`的论点却没有.他说他们是相同的,但更喜欢`text`,因为`varchar`可以与`varchar(n)`混淆,因为`text`是较少的字符来键入.但是使用`text`而不是`varchar`,你会丢失存储的数据不应该很长的上下文.例如,存储带有"text"的用户名似乎对我有误导性. (5认同)
  • 但为了与数据库无关,这是最好的方法吗?如果要更改数据库怎么办?我认为,在现实世界中,这种情况经常发生,但仍然......如果"没有性能差异",为什么不坚持预期使用字符串来处理简短的事情和文本用于更长的事情?鉴于你自己的评论索引字符串,似乎仍然是最好的方法. (4认同)
  • 有没有人知道性能损失是否显着或是否是过早优化的情况?我的猜测是你不会注意到一个区别,该段的开头似乎证实:"这三种类型之间没有性能差异". (2认同)

ber*_*kes 17

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

有关参考资料的深入分析,请访问http://www.pythian.com/news/7129/text-vs-varchar/

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


aje*_*jet 11

如上所述,不仅仅是db数据类型,如果你是脚手架,它也会影响将生成的视图.string会生成一个text_field文本,会生成一个text_area


Gur*_* BN 11

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

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

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

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