2010-07-28 2 views

ответ

453

Разница заключается в том, как символ преобразуется в соответствующий тип столбца в языке запросов.

с 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

Когда каждый должен использоваться?

Как общее правило, используют :string для ввода короткий текст (имя пользователя, адрес электронной почты, пароль, названия и т.д.) и использовать :text дольше ожидаемого ввода, такие как описание, комментарий контента и т.д.

+9

Я думаю, что лучшее правило - всегда использовать ': text'. См. Http://www.depesz.com/2010/03/02/charx-vs-varcharx-vs-varchar-vs-text/ –

+61

Для MySQL - не так много, вы можете иметь индексы на varchars, вы не можете по тексту , –

+9

Реализация PostgreSQL предпочитает текст. Единственная разница для pg string/text - ограничение длины для строки. Нет различий в производительности. – wurde

17

В вашей базе данных String переводится как «Varchar», а текст переводится как «текст». В varchar может быть гораздо меньше предметов, текст может быть (почти) любой длины.

Для углубленного анализа с хорошими отзывами проверить http://www.pythian.com/news/7129/text-vs-varchar/

Edit: Некоторые СУБД могут загрузить varchar на одном дыхании, но магазин текст (и блоб) вне таблицы. A SELECT name, amount FROM products может быть намного медленнее при использовании text для name, чем при использовании varchar. А поскольку Rails по умолчанию загружает записи с SELECT * FROM..., ваши текстовые столбцы будут загружены. Это, вероятно, никогда не будет реальной проблемой в вашем или моем приложении, хотя (преждевременная оптимизация - это ...). Но знать, что текст не всегда «свободен», хорошо знать.

138

Если вы используете Postgres использовать текст, где вы можете, если у вас есть ограничение размера, так как нет никакого падения производительности для текста против VARCHAR

там нет разницы в производительности между этими тремя типами, кроме увеличенной памяти при использовании пустым типом и несколькими дополнительными циклами ЦП для проверки длины n сохранение в столбце с ограничением длины. Хотя характер (n) имеет преимущества производительности в некоторых других системах баз данных, в PostgreSQL такого преимущества нет; на самом деле символ (n) обычно является самым медленным из трех из-за его дополнительных затрат на хранение. В большинстве случаев текст или символ варьированием следует использовать вместо

PostsgreSQL manual

+4

Но в интересах агностики базы данных, это лучший подход? Что делать, если вы хотите изменить базу данных? Я предоставляю в реальном мире, что этого не происходит часто, но все же ... если «нет различий в форме», почему бы не придерживаться ожидаемого использования строки для коротких вещей и текста для более длительных вещей? И, учитывая ваши собственные строки индексации комментариев, по-прежнему кажется лучшим подходом. –

+6

Существует множество причин, по которым это может понадобиться в реальном мире, где лучше всего пролить мысль о том, что существует одно истинное решение любой проблемы. –

+13

Это может быть так, но агностицизм базы данных - лжепророк. –

10

Как объяснялось выше, а не только дб тип данных он также будет влиять на вид, который будет создан, если вы подмости. Строка генерирует текст text_field, генерирует текстовое поле

10

Строка, если размер фиксированный и маленький, а текст - переменный и большой. Это очень важно, потому что текст больше, чем строки. Он содержит намного больше килобайт.

Так что для небольших полей всегда используйте строку (varchar). Поля вроде. first_name, login, email, subject (статьи или сообщения) и пример текстов: содержание/тело сообщения или статьи. поля для пунктов и т.д.

Строка размер 1 до 255 (по умолчанию = 255)

Размер текста 1 до 4294967296 (по умолчанию = 65536) 2

1

Используйте строку для короткого поля, как имена, адрес, телефон, Компания

Используйте текст для получения более подробной информации, комментариев, содержимого, абзацев.

Мое общее правило, если это нечто большее, чем одна строка, я обычно иду за текстом, если это короткие 2-6 слов, я иду за строкой.

Официальное правило: 255 для строки. Итак, если ваша строка содержит более 255 символов, перейдите к тексту.

Смежные вопросы