"...Начальные символы пробелов (символ ASCII 32) во вводимых строках фиксированной длины являются значимыми, в то время как заверщающие - нет. При coxpaнeнии строк фиксированной длины Fireblrd убирает конечные пробелы, строки отыскиваются без избыточноrо расширения до объявленной длины.
Использование типов фиксированной длины не рекомендуется для данных, которые могут содержать значимые конечные символы пробелов, или для элементов, чья фактическая длина может сильно изменяться..."
И далее:
"...Символьный тип переменной длины используется для хранения текстов, потому что размер хранимой структуры равен фактическому размеру данных плюс два байта. Все символы, введенные в поле переменной длины, трактуются как значимые, включая начальные и конечные пробельные символы..."
Ага, хорошо... Создал табличку ATABLE с двумя полями - TXT VARCHAR (15) и TXT2 CHAR (15). В оба поля записал по три символа 'ПРО' и попробовал вот такой запросик:
Код: Выделить всё
SELECT '''' || TXT || '''', '''' || TXT2 || '''' from ATABLEConcatenation1 Concatenation2
'ПРО' 'ПРО '
Это вроде как напрямую противоречит тому, что у Борри написано?!? Или я чего-то не понимаю? Как раз вот в случае с VARCHAR (поле TXT) конечные пробелы отбросились, в то время как с CHAR (поле TXT2) они остались на месте...
Я просто на пробу конвертнул Paradox'овскую базу в FB и ковыряюсь с ней, так есть места, где надо бы в CHAR перевести, а вот все тексты наименований в справочнике думал как лучше - VARCHAR, как по-умолчанию IBPump сделал, или всё-таки в CHAR переделать? Вот тут и натолкнулся на такую вот штуку...