Разница между строкой и текстом в rails?
Я делаю новое веб-приложение с помощью Rails и задавался вопросом, в чем разница между string
и text
? И когда каждый из них должен быть использован?
7 ответов
разница зависит от того, как символ преобразуется в соответствующий тип столбца на языке запросов.
С 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
для более длительного ожидаемого ввода, такого как описания, содержимое комментариев и т. д.
Если вы используете postgres использовать текст везде, где вы можете, если у вас нет ограничения размера, так как нет штрафа производительности для текста против varchar
между этими тремя типами нет разницы в производительности, кроме увеличенного пространства для хранения при использовании типа с пустым заполнением и нескольких дополнительных циклов процессора для проверки длины при хранении в столбце с ограниченной длиной. А символ(Н) имеет преимущества в производительности в некоторых других системах баз данных, нет такое преимущество в PostgreSQL; на самом деле символ(n) обычно самый медленный из трех из-за его дополнительных затрат на хранение. В большинстве ситуаций вместо
строка переводится в" Varchar "в вашей базе данных, а текст переводится в"text". Varchar может содержать гораздо меньше элементов, текст может быть (почти) любой длины.
для углубленного анализа с хорошими ссылками проверьте http://www.pythian.com/news/7129/text-vs-varchar/
Edit: некоторые ядра баз данных могут загружать varchar
за один раз, но сохраните текст (и blob) вне таблицы. А SELECT name, amount FROM products
может быть намного медленнее, при использовании text
для name
чем когда вы используете varchar
. А так как Rails, по умолчанию загружает записи с SELECT * FROM...
ваши текстовые столбцы будут загружены. Это, вероятно, никогда не будет реальной проблемой в вашем или моем приложении (преждевременная оптимизация ...). Но знать, что текст не всегда "свободен", - это хорошо.
как объяснялось выше, не только тип данных db, он также повлияет на представление, которое будет создано, если вы леса. строка будет генерировать text_field текст будет генерировать text_area
строка, если размер фиксированный и маленький, и текст, если он переменный и большой. Это важно, потому что текст намного больше, чем строки. Он содержит намного больше килобайт.
поэтому для небольших полей всегда используйте строку (varchar). Поля вроде. first_name, логин, электронная почта, тема (статьи или сообщения) и пример текстов: содержание / тело сообщения или статьи. полей, абзацев и т. д.
размер строки от 1 до 255 (по умолчанию = 255)
размер текста от 1 до 4294967296 (по умолчанию = 65536)2
используйте строку для более короткого поля, как имена, адрес, телефон, компания
используйте текст для большего контента, комментариев, контента, абзацев.
мое общее правило, если это что-то, что больше одной строки, я обычно иду на текст, если это короткие 2-6 слов, я иду на строку.
официальное правило 255 для строки. Итак, если ваша строка больше 255 символов, перейдите к тексту.
если вы используете oracle... STRING
будет и 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 }
}