Re: VarChar | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Не совсем верно. Помимо бита в служебном (_NullFlags) поле используется и один из байт собственно данного поля для хранения "реального размера данных". Алгоритм тут простой:
если реальный_размер = максимальный_размер_поля то: Данные хранятся идентично полю типа Character Бит "усечения размера" в служебном поле _NullFlags сброшен. иначе Реальные данные хрянятся как Character (с хвостовыми пробелами!), но в последнем байте этой "строки" хранится её реальный размер (т.е. это не "отдельный байт с размером", а просто последний байт из пространства отведённого для этого поля). Бит "усечения размера" в служебном поле _NullFlags установлен. к.в. Таким образом данные типов Varchar(N)/Varchar(binary)(N)/Varbinary(N) - где N - это их "максимально допустимый размер" физически занимают N байт + 1 бит в служебном поле _NullFlags... Естетсвенно, если поле объявлено как NULLable то оно будет использовать ещё один дополнительный бит (признак NULL) в этом служебном поле. По сравнению с "большими СУБД" это конечно не есть "реальный varchar" - ибо для реализации реального надо по меньшей мере иметь возможность работы с записями переменной длинны - т.е. поломать всю схему работы с dbf-файлами - что по меньшей мере неразумно... Т.е. если надо "просто экономить место" - то как и раньше выход в использовании memo-полей (возможно с "тонкой" настройкой BLOCKSIZE), но вот для взаимодействия с "большими SQL серверами" эти новые типы весьма полезны. ------------------ WBR, Igor |
Re: VarChar | |
---|---|
Aleksey Tsingauz [MSFT] |
Цитата: Здравствуйте, Игорь! Что конкретно вы находите неверным в моем посте? Алексей. |
Re: VarChar | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
То что вы с Владимиром показали 2 аспекта, но отрицаете друг друга Он
ошибочно считает что байт размера это дополнительный байт (тогда как это просто последний байт строки, который просто не использеется если поле забито "под завязку"), ты же никак не упомянул что такой байт-счётчик реально существует, но верно заметил о наличии дополнительного бита в служебном поле (суть этого бита как раз в том чтобы указато фоксу - имеется ли байт-счётчик или его нету - т.е. поле забито под завязку). Я лишь скомпоновал обе эти части вместе ------------------ WBR, Igor |
Re: VarChar | |
---|---|
Владимир Максимов Автор Сообщений: 14095 Откуда: Москва Дата регистрации: 02.09.2000 |
Был не точен. Когда я писал первоначальное сообщение я не очень внимательно почитал Help. На выходных "вскрыл" VarChar и посмотрел, как же это все реально записывается на диск. В общем, все как описал Игорь.
------------------ |
Re: VarChar | |
---|---|
Aleksey Tsingauz [MSFT] |
Цитата: Здравствуйте, Игорь! Действительно, help файл я не скопировал, просто ответил на опасения связанные с увеличением размера записи. Упоминать же байт счетчик в этом контексте не имеет смысла, его существование на размере записи никак не сказывается. Aleksey Tsingauz Visual FoxPro Dev Team |
Re: VarChar | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
А blob по хранению как-нить отлчается от обычного memo?
------------------ WBR, Igor |
Re: VarChar | |
---|---|
Aleksey Tsingauz [MSFT] |
Цитата: Нет, не отличается. Aleksey Tsingauz Visual FoxPro Dev Team |
Re: VarChar | |
---|---|
Владимир Максимов Автор Сообщений: 14095 Откуда: Москва Дата регистрации: 02.09.2000 |
Один-в-один обычное символьное поле.
Просто сделали очередной логичный шаг. Если в Memo(binary) не производили автотрансляцию кодовых страниц, то в BLOB вообще не конвертируют в символы. Оставляют "как есть" голый ASCII-код записанный в 16-ричной системе. То же самое делает функция: ?CreateBinary("Пример") Область применения позиционируется такая же, как и для полей типа Memo(dinary) ------------------ |
© 2000-2024 Fox Club  |