Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.06.2012, 14:19   #1
Linel
Форумчанин
 
Аватар для Linel
 
Регистрация: 21.02.2009
Сообщений: 372
По умолчанию Типы полей CHAR, VARCHAR

Почитал в интернете про разницу между этими двумя типами данных. Правильно ли я понял, что если у меня есть 2 колонки типов:
CHAR(10) и VARCHAR(10), и я попытаюсь записать туда одинаковые значения: "abc", то:

В первом случае, при сохранении данных добавится 7 пробелов, чтобы дополнить недостающие символы до заданной длины (10). А при чтении данных, эти пробелы отсекаются?

А во втором случае сохранится конкретно "abc". Если на конце сохраняемой строки будут пробелы, то перед записью они отсекуться.

Если это так и я все понял правильно, то хранить данные в полях типа VARCHAR выгоднее - так как "оптимизация" строки происходит до записи в БД, а не после? В результате размер данных уменьшается, что приводит к уменьшению общего объема БД (особенно, если записей в ней много)?

Правильно ли я все понял? И для чего тогда нужен тип CHAR?
No name. Just Linel.
Linel вне форума Ответить с цитированием
Старый 28.06.2012, 14:59   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Почти так, но есть и нюансы, например для MS SQL http://msdn.microsoft.com/ru-ru/libr...sql.90%29.aspx

В общих чертах - для хранения varchar в каждом поле нужны дополнительные байты для указания длины, в char не нужны, но хранятся концевые пробелы. Если длина поля несколько байт наверно бы использоввал char. Если длина большая, но почти всегда поле заполнено, то тоже char.

Поля char, если они в основном заполнены будут обрабатываться быстрее varchar, чем меньше заполненность, тем это больше нивелируется за счет увеличения кол-ва страниц для хранения информации. Теоретически.
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 28.06.2012, 15:36   #3
Linel
Форумчанин
 
Аватар для Linel
 
Регистрация: 21.02.2009
Сообщений: 372
По умолчанию

Вообщем, порылся в своих учебниках.. Может, кому-то тоже пригодится.

Разница между этими типами не только в памяти, занимаемой данными, но и в производительности.

Если я задам тип поля CHAR(100), то при большом количестве записей база будет "весить" больше, чем если бы тип поля был бы VARCHAR(100), т.к. в первом случае данные будут всегда занимать 100 символов, а во втором длина данных будет определяться динамически, НО!

Если в приоретете стоит производительность, то при большом количестве записей выгоднее использовать тип CHAR(100), так как сервер будет знать точный размер строк (100) и соответственно будет знать где начинается и заканчивается каждая строка, что способствует более быстрой "выборке" записей.

Такие, вот, дела.
No name. Just Linel.

Последний раз редактировалось Linel; 28.06.2012 в 15:39.
Linel вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Delphi + MySQL (типы полей) _SERGEYX_ БД в Delphi 7 07.09.2010 10:22
char и varchar - различия в размерах nickel-j Microsoft Office Access 3 03.06.2010 23:48
Как изменить в InterBase размер поля varchar(10) на varchar(20) tarakan1983 БД в Delphi 4 23.03.2009 15:35
Типы полей ADOTable AnnNet БД в Delphi 2 21.07.2008 16:40