Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Типы данных VARCHAR TINYTEXT TEXT
 
 автор: kievigor   (12.05.2006 в 22:58)   письмо автору
 
 

Может расскажет кто ни будь в чем разница между типами VARCHAR и TEXT. В чем преимущества и недостатки использования этих типов данных. То, что TEXT позволяет хранить больший объем данных чем VARCHAR я знаю, но не понимаю зачем нужен тогда VARCHAR вообще.

И зачем использовать типы TINYTEXT вместо TEXT какие это дает преимущества.

   
 
 автор: alik   (13.05.2006 в 09:40)   письмо автору
 
   для: kievigor   (12.05.2006 в 22:58)
 

TEXT - cтроки с максимальной длиной символов равной 65535.
TYNITEXT - строки с максимальной длиной 255 байт
VARCHAR(NUM) - строка переменной длины (1 <= NUM <= 255)
> какие это дает преимущества
экономия

   
 
 автор: cheops   (13.05.2006 в 11:18)   письмо автору
 
   для: kievigor   (12.05.2006 в 22:58)
 

VARCHAR - это короткий тип, его максимальные размер в MySQL только недавно увеличили с 255 байт до 65535. Зато он является стандартным и база данных спроектированная с его применением может быть использована не только в MySQL, но и в других базах данных.
TEXT - это не стандартный тип, но зато он имеет несколько модификаций:
TINYTEXT - 255 байт 
TEXT- 64 Кб 
MEDIUMTEXT - 16 Мб 
LONGTEXT - 4 Гб

В зависимости от предполагаемого объёма данных - можно выбрать тот или иной тип.

   
 
 автор: kievigor   (13.05.2006 в 15:00)   письмо автору
 
   для: cheops   (13.05.2006 в 11:18)
 

Вот и не и не понятно, какие преимущества дает тип данных с меньшим максимально возможным объемом по сравнению с большим, чем TINYTEXT лучше TEXT, а текст лучше чем MEDIUMTEXT LONGTEXT. Ведь на сколько я понимаю объем памяти строка будет занимать один и тот же не зависимо в какой из типов данных строк переменной длинны она будет помещена, так зачяем использовать более короткие типы. Разницу между VARCHAR и TEXT из ответа cheopsa понял, но хотелось бы еще узнать, только ли есть преимущества совместимости или есть еще чтото. И еще как задать VARCHAR с длиной символов равной 65535. Просто указать в размере поля 65535, или еще что то надо.

   
 
 автор: cheops   (13.05.2006 в 15:38)   письмо автору
 
   для: kievigor   (13.05.2006 в 15:00)
 

Дело в том, что под адресацию отводятся дополнительные байты. Т.е. если мы будем хранить пустую строку во всех типах данных, то реально они в таблице будут занимать
TINYTEXT - 1 байт 
TEXT- 2 байта
MEDIUMTEXT - 3 байта
LONGTEXT - 4 байта

Вроде не много, но если у вас в таблице 100 000 записей, а хранятся только короткие строки, то незачем выделять под них LONGTEXT - так как это обернётся лишней половиной мегабайта - а чем больше объём таблице - тем медленее с ней работает MySQL.

>Просто указать в размере поля 65535, или еще что то надо.
Да, но это только начиная с MySQL 5.0.3, до этой версии максимальный размер равен 256.

   
 
 автор: kievigor   (13.05.2006 в 16:52)   письмо автору
 
   для: cheops   (13.05.2006 в 15:38)
 

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

   
 
 автор: kievigor   (13.05.2006 в 17:06)   письмо автору
 
   для: cheops   (13.05.2006 в 15:38)
 

У меня есть еще вопрос. Есть ли преимущества у поя VARCHAR у которого указана меньшая длинна допустимой строки по сравнению с тем же VARCHAR у которого указан предельно допустимая длинна строки. Ведь все равно перед внесением данных в таблицу идет проверка на допустимую длину. Так не все ли равно укажу я допустим 10 символов, или 255, в размере поля, если помещаю в него строку максимум длинной 10 символов.

   
 
 автор: cheops   (13.05.2006 в 17:39)   письмо автору
 
   для: kievigor   (13.05.2006 в 17:06)
 

Если вы указываете VARCHAR(255), то разницы по сравнению с VARCHAR нет, а вот если вы указываете VARCHAR(10) - это означает, под поля столбца отводится максимум 10 - в результате увеличивается скорость работы (но не сильно). Если у вас действительно используется столбец с 10 символами - лучше использовать CHAR - он обрабатывается гораздо быстрее VARCHAR, правда, если под него отвели 10 байт, даже если записыватся пустая строка, всё равно 10 байт затрачивается. Кроме того, CHAR и VARCHAR не совместимы, если в таблице имеется хотя бы одно поле переменной длины все поля типа CHAR автоматически приводятся к VARCHAR ().

   
 
 автор: kievigor   (13.05.2006 в 18:05)   письмо автору
 
   для: cheops   (13.05.2006 в 17:39)
 

В общем если я правильно понял VARCHAR(10) будет работать быстрее чем VARCHAR(255), а за счет чего? Объем памяти все равно занимается только количеством внесенных данных. А по поводу того что вместо VARCHAR(10) лучше использовать CHAR(10), то думаю это весьма редкий случай, так как если я правильно понял, если таблица содержит хоть одно поле VARCHAR, то все поля CHAR все равно будут обрабатываться как VARCHAR, да и объем памяти VARCHAR заимеет меньше если много пустых данных будет. Если я не прав поправьте пожалуйста.

   
 
 автор: cheops   (13.05.2006 в 18:41)   письмо автору
 
   для: kievigor   (13.05.2006 в 18:05)
 

>В общем если я правильно понял VARCHAR(10) будет работать быстрее чем VARCHAR(255), а
>за счет чего?
VARCHAR медленее CHAR из-за того, что граница у него плавающая, CHAR идёт блоками, из-за чего можно точно предсказать где заканчивается одна запись и начинается другая. MySQL, даже если записи переменной длины всегда пытается предугадать средний размер записи - это позволяет забросить как можно ближе к цели внутренний указатель. У 10 символво разброс в длине будет гораздо меньше чем у 255 поэтому MySQL сможет прогнозировать границу записи более точно. Однако проявляться разница в скрорости будет лишь на очень больших таблицах, если размер таблицы не превышает 10 Мб, скорее всего разницу почувствовать не удасться. Тут скорее больше теоритеческая возможность, чем практическая. Я всегда использую VARCHAR, так как это позволяет создавать более гибкие таблицы.

   
 
 автор: kievigor   (13.05.2006 в 23:52)   письмо автору
 
   для: cheops   (13.05.2006 в 18:41)
 

Еще раз большое спасибо.
Теперь вроде сложилась полная картина :-)))

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования