Я делаю новое веб-приложение с использованием Rails, и мне было интересно, в чем разница между string
и text
? И когда каждый должен использоваться?
436
Я делаю новое веб-приложение с использованием Rails, и мне было интересно, в чем разница между string
и text
? И когда каждый должен использоваться?
Разница заключается в том, как символ преобразуется в соответствующий тип столбца на языке запросов.
с 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)
Ссылка:
Когда каждый должен быть использован?
Как общее практическое правило, используйте :string
для краткого ввода текста (имя пользователя, адрес электронной почты, пароль, заголовки и т. Д.) И используйте :text
для более продолжительного ввода, такого как описания, комментарии и т. Д.
:text
. См. Depesz.com/2010/03/02/charx-vs-varcharx-vs-varchar-vs-texttrue
в varchar (ergo,string
поле типа) в MySQL сериализует значение в1
(что совершенно справедливо). Однако приtext
типе сохранение значения «true» приводит к его сериализации в виде единственного символаt
. Я перенес столбец, не осознавая этого, и все будущие строки, где значение true, сейчасt
. У кого-нибудь есть понимание этого поведения?Если вы используете postgres, используйте текст везде, где только можете, если только у вас нет ограничений по размеру, так как для текста и varchar не снижается производительность
Руководство по PostsgreSQL
источник
text
над(n)
типами данных убедительны, но аргумент для использованияtext
надvarchar
не. Он говорит, что они одинаковы, но предпочитает,text
потому чтоvarchar
их можно спутатьvarchar(n)
и потому, чтоtext
меньше символов для ввода. Ноtext
вместо этогоvarchar
вы теряете контекст, в котором хранящиеся данные не должны быть длинными. Например, сохранение имени пользователя с помощьюtext
мне кажется вводящим в заблуждение.Строка переводится как «Varchar» в вашей базе данных, а текст переводится как «текст». Varchar может содержать гораздо меньше элементов, текст может быть (почти) любой длины.
Для углубленного анализа с хорошими ссылками проверьте http://www.pythian.com/news/7129/text-vs-varchar/
Редактировать: некоторые движки базы данных могут загружаться
varchar
за один раз, но хранить текст (и большие двоичные объекты) вне таблицы. АSELECT name, amount FROM products
может быть намного медленнее при использованииtext
для,name
чем когда вы используетеvarchar
. А так как Rails по умолчанию загружает записи сSELECT * FROM...
вашими текстовыми колонками, будут загружены. Это, вероятно, никогда не будет реальной проблемой в вашем или моем приложении, хотя (преждевременная оптимизация ...). Но знание того, что текст не всегда «бесплатный», полезно знать.источник
Строка, если размер фиксированный и маленький, и текст, если он переменный и большой. Это очень важно, потому что текст больше строк. Он содержит намного больше килобайт.
Поэтому для небольших полей всегда используйте строку (varchar). Поля как. имя, логин, адрес электронной почты, тема (статьи или сообщения) и пример текстов: содержание / текст сообщения или статьи. поля для абзацев и т. д.
Размер строки от 1 до 255 (по умолчанию = 255)
Размер текста от 1 до 4294967296 (по умолчанию = 65536) 2
источник
Как объяснено выше, не только тип данных db, это также повлияет на представление, которое будет сгенерировано, если вы создаете леса. строка сгенерирует текстовое поле текст сгенерирует текстовое поле
источник
Используйте строку для более короткого поля, как имена, адрес, телефон, компания
Используйте текст для большего содержания, комментариев, контента, абзацев.
Мое общее правило: если речь идет о чем-то, что больше чем одна строка, я обычно иду за текстом, если это короткие 2-6 слов, я иду за строкой.
Официальное правило - 255 для строки. Итак, если ваша строка содержит более 255 символов, перейдите к тексту.
источник
Если вы используете оракул ...
STRING
будет создан какVARCHAR(255)
столбец иTEXT
, какCLOB
.https://github.com/rsim/oracle-enhanced/blob/master/lib/active_record/connection_adapters/oracle_enhanced_adapter.rb
источник
Принятый ответ удивителен, он правильно объясняет разницу между строкой и текстом (в основном это предельный размер в базе данных, но есть несколько других ошибок), но я хотел указать на небольшую проблему, которая заставила меня пройти через этот ответ не полностью сделал это для меня.
Максимальный размер : limit => 1 до 4294967296 не работает точно так, как положено, мне нужно было перейти -1 от этого максимального размера. Я храню большие капли JSON, и иногда они могут быть сумасшедшими.
Вот моя миграция с большим значением на месте со значением, на которое MySQL не жалуется.
Обратите внимание на 5 в конце лимита вместо 6
источник
Если атрибут соответствует
f.text_field
в форме, используйте строку , если он соответствует,f.text_area
используйте текст .источник