Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Пробелы  [new]
nesfer
Member

Откуда:
Сообщений: 24
Проблема вот в чем (работаю с sql server 2000) :
Есть к примеру табличка
Поле1 char 10
Поле2 char 15
Поле3 varchar 50
(с цифровыми полями все ок)
Пусть в 1-ом поле будет храниться слова PRO , тогда при чтении из DBGrida
В Edit будет прочтено не слово PRO а PRO________ где подчеркивание это пробелы ,т.е к значению до упора добавляются пробелы
Вопрос что эта за беда ? проблема на серве ? как мне читать оригинал а не значение + куча пробелов?
Пожалуйста помогите кто ,заранее большое спасибо !!!!
6 июн 09, 01:50    [7272306]     Ответить | Цитировать Сообщить модератору
 Re: Пробелы  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36800
Поля типа char - фиксированной длины и добиваются пробелами. В отличие от полей типа varchar.
6 июн 09, 02:12    [7272318]     Ответить | Цитировать Сообщить модератору
 Re: Пробелы  [new]
RAndrey
Member

Откуда:
Сообщений: 324
работа с char несколько быстрее, чем с varchar-ом
структуру поэтому - возможно - лучше не менять, особенно если таблица большая

а выбирать можно, например, как

select LTRIM(RTRIM(Поле1)) as Поле1...
6 июн 09, 10:31    [7272463]     Ответить | Цитировать Сообщить модератору
 Re: Пробелы  [new]
nesfer
Member

Откуда:
Сообщений: 24
RAndrey
работа с char несколько быстрее, чем с varchar-ом
структуру поэтому - возможно - лучше не менять, особенно если таблица большая

а выбирать можно, например, как

select LTRIM(RTRIM(Поле1)) as Поле1...

фух ...большое спасибо !!!! !!!!!
6 июн 09, 10:55    [7272475]     Ответить | Цитировать Сообщить модератору
 Re: Пробелы  [new]
DeColo®es
Member

Откуда: Москва
Сообщений: 5499
Блог
RAndrey
работа с char несколько быстрее, чем с varchar-ом
Конечно, для процессора это проще.
А вот дисковая система и память пострадают - для хранения одного и того же количества строк придется резервировать больше места как на диске, так и в памяти. В результате можно получить сильное снижение производительности.
С точки зрения оптимизации, строковые поля фиксированной длины есть смысл применять тогда, когда средняя длина строки приближается к длине поля.

автор
select LTRIM(RTRIM(Поле1)) as Поле1...
А зачем, простите, LTRIM?
6 июн 09, 11:28    [7272497]     Ответить | Цитировать Сообщить модератору
 Re: Пробелы  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36800
Ага, очень проще, я смотрю, получается, типа вызов trim ваще не стоит ничего, и в типа в памяти пробелы не хранятся, и типа на диске не хранятся.
6 июн 09, 13:05    [7272604]     Ответить | Цитировать Сообщить модератору
 Re: Пробелы  [new]
RAndrey
Member

Откуда:
Сообщений: 324
Гавриленко Сергей Алексеевич
Ага, очень проще, я смотрю, получается, типа вызов trim ваще не стоит ничего, и в типа в памяти пробелы не хранятся, и типа на диске не хранятся.


Может ему и не надо будет в каждом запросе trim? Возможно тогда и не надо переделывать.

Когда-то имел таблицу с несколькими миллионами записей и полем varchar(500). Тормоза были те еще. Потом сделал text и ощутил счастье :)
6 июн 09, 16:02    [7272850]     Ответить | Цитировать Сообщить модератору
 Re: Пробелы  [new]
AAron
Member

Откуда: Москва
Сообщений: 4324
RAndrey,

а знаете в чем разница между text и varchar? неужто весь текст был максимально забит пробелами?
6 июн 09, 16:52    [7272936]     Ответить | Цитировать Сообщить модератору
 Re: Пробелы  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36800
RAndrey
Гавриленко Сергей Алексеевич
Ага, очень проще, я смотрю, получается, типа вызов trim ваще не стоит ничего, и в типа в памяти пробелы не хранятся, и типа на диске не хранятся.


Может ему и не надо будет в каждом запросе trim? Возможно тогда и не надо переделывать.

Когда-то имел таблицу с несколькими миллионами записей и полем varchar(500). Тормоза были те еще. Потом сделал text и ощутил счастье :)
Блоб вместо варчара? И щастье привалило? Не верю.
6 июн 09, 19:52    [7273141]     Ответить | Цитировать Сообщить модератору
 Re: Пробелы  [new]
an0nym
Member

Откуда:
Сообщений: 7076
Гавриленко Сергей Алексеевич,
я, возможно, ошибаюсь: text случайно не хранится "отдельно" от остальных полей?
6 июн 09, 19:55    [7273147]     Ответить | Цитировать Сообщить модератору
 Re: Пробелы  [new]
vino
Member

Откуда:
Сообщений: 1191
Гавриленко Сергей Алексеевич
RAndrey
Гавриленко Сергей Алексеевич
Ага, очень проще, я смотрю, получается, типа вызов trim ваще не стоит ничего, и в типа в памяти пробелы не хранятся, и типа на диске не хранятся.


Может ему и не надо будет в каждом запросе trim? Возможно тогда и не надо переделывать.

Когда-то имел таблицу с несколькими миллионами записей и полем varchar(500). Тормоза были те еще. Потом сделал text и ощутил счастье :)
Блоб вместо варчара? И щастье привалило? Не верю.

почему нет? физичеки выкинув из таблицы содержимое этих полей, получить ускорение не сложно, но если по этому полю понадобится что-то искать, то - "зря ты это сделал"
6 июн 09, 21:27    [7273259]     Ответить | Цитировать Сообщить модератору
 Re: Пробелы  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36800
an0nym
Гавриленко Сергей Алексеевич,
я, возможно, ошибаюсь: text случайно не хранится "отдельно" от остальных полей?
Есть определенные настройки. С другой стороны, если текст хранится отдельно от таблицы, то нужна отдельная операция чтобы локейтить данные в файле, когда, к примеру, варчар, лежит тут же.
6 июн 09, 21:42    [7273279]     Ответить | Цитировать Сообщить модератору
 Re: Пробелы  [new]
RAndrey
Member

Откуда:
Сообщений: 324
Гавриленко Сергей Алексеевич
RAndrey
Гавриленко Сергей Алексеевич
Ага, очень проще, я смотрю, получается, типа вызов trim ваще не стоит ничего, и в типа в памяти пробелы не хранятся, и типа на диске не хранятся.


Может ему и не надо будет в каждом запросе trim? Возможно тогда и не надо переделывать.

Когда-то имел таблицу с несколькими миллионами записей и полем varchar(500). Тормоза были те еще. Потом сделал text и ощутил счастье :)
Блоб вместо варчара? И щастье привалило? Не верю.


Это самое поле - назначение платежа в проводке. По нему редко ведется поиск (я вообще таких запросов не помню). И в большинство селектов это поле так же не входит (а база используется исключительно для анализа, никаких апдейтов не бывает). Когда я его именно отдельно положил - стало хорошо.
6 июн 09, 23:19    [7273385]     Ответить | Цитировать Сообщить модератору
 Re: Пробелы  [new]
DeColo®es
Member

Откуда: Москва
Сообщений: 5499
Блог
RAndrey
И в большинство селектов это поле так же не входит (а база используется исключительно для анализа, никаких апдейтов не бывает). Когда я его именно отдельно положил - стало хорошо.
Какие еще особенности вашей базы нужно знать, чтобы понимать применимость советов? ;)

К тому же, можно было просто нормально проиндексировать такую аналитическую базу...
7 июн 09, 00:35    [7273469]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить