|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
28.06.2012, 14:19 | #1 |
Форумчанин
Регистрация: 21.02.2009
Сообщений: 372
|
Типы полей CHAR, VARCHAR
Почитал в интернете про разницу между этими двумя типами данных. Правильно ли я понял, что если у меня есть 2 колонки типов:
CHAR(10) и VARCHAR(10), и я попытаюсь записать туда одинаковые значения: "abc", то: В первом случае, при сохранении данных добавится 7 пробелов, чтобы дополнить недостающие символы до заданной длины (10). А при чтении данных, эти пробелы отсекаются? А во втором случае сохранится конкретно "abc". Если на конце сохраняемой строки будут пробелы, то перед записью они отсекуться. Если это так и я все понял правильно, то хранить данные в полях типа VARCHAR выгоднее - так как "оптимизация" строки происходит до записи в БД, а не после? В результате размер данных уменьшается, что приводит к уменьшению общего объема БД (особенно, если записей в ней много)? Правильно ли я все понял? И для чего тогда нужен тип CHAR?
No name. Just 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 |
Форумчанин
Регистрация: 21.02.2009
Сообщений: 372
|
Вообщем, порылся в своих учебниках.. Может, кому-то тоже пригодится.
Разница между этими типами не только в памяти, занимаемой данными, но и в производительности. Если я задам тип поля CHAR(100), то при большом количестве записей база будет "весить" больше, чем если бы тип поля был бы VARCHAR(100), т.к. в первом случае данные будут всегда занимать 100 символов, а во втором длина данных будет определяться динамически, НО! Если в приоретете стоит производительность, то при большом количестве записей выгоднее использовать тип CHAR(100), так как сервер будет знать точный размер строк (100) и соответственно будет знать где начинается и заканчивается каждая строка, что способствует более быстрой "выборке" записей. Такие, вот, дела.
No name. Just Linel.
Последний раз редактировалось Linel; 28.06.2012 в 15:39. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
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 |