首页 文章

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

提问于
浏览
397

我'm making a new web app using Rails, and was wondering, what'是 stringtext 之间的区别?什么时候应该使用?

7 回答

  • 10

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

    如需深入分析,请参考http://www.pythian.com/news/7129/text-vs-varchar/

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

  • 10

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

    使用MySQL:字符串映射到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)
    

    参考:

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

    When should each be used?

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

  • 1

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

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

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

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

  • 0

    如果您正在使用oracle ... STRING 将创建为 VARCHAR(255) 列, TEXT 将创建为 CLOB .

    NATIVE_DATABASE_TYPES = {
        primary_key: "NUMBER(38) NOT NULL PRIMARY KEY",
        string: { name: "VARCHAR2", limit: 255 },
        text: { name: "CLOB" },
        ntext: { name: "NCLOB" },
        integer: { name: "NUMBER", limit: 38 },
        float: { name: "BINARY_FLOAT" },
        decimal: { name: "DECIMAL" },
        datetime: { name: "TIMESTAMP" },
        timestamp: { name: "TIMESTAMP" },
        timestamptz: { name: "TIMESTAMP WITH TIME ZONE" },
        timestampltz: { name: "TIMESTAMP WITH LOCAL TIME ZONE" },
        time: { name: "TIMESTAMP" },
        date: { name: "DATE" },
        binary: { name: "BLOB" },
        boolean: { name: "NUMBER", limit: 1 },
        raw: { name: "RAW", limit: 2000 },
        bigint: { name: "NUMBER", limit: 19 }
    }
    

    https://github.com/rsim/oracle-enhanced/blob/master/lib/active_record/connection_adapters/oracle_enhanced_adapter.rb

  • 480

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

  • 17

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

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

    PostsgreSQL manual

  • 145

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

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

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

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

相关问题