Поддерживает ли Sybase строковые типы, которые он не обрезает? - PullRequest
0 голосов
/ 02 июля 2011

Принятый ответ на на этот вопрос утверждает, что использование столбца char сохранит все заполнения пробелов в строке в Sybase, но это не такЯ вижу (если я не ошибаюсь, что означает «заполнение пробелов»).Например, когда я запускаю следующий скрипт:

create table #check_strings
(
    value char(20) null
)

insert into #check_strings values (null)
insert into #check_strings values ('')
insert into #check_strings values (' ')
insert into #check_strings values ('     ')
insert into #check_strings values ('blah')
insert into #check_strings values ('blah ')
insert into #check_strings values ('blah    ')
insert into #check_strings values ('    blah    ')

select value, len(value) from #check_strings

, я получаю следующий вывод:

[NULL]            - [NULL]
[single space]    - 1
[single space]    - 1
[single space]    - 1
blah              - 4
blah              - 4
blah              - 4
[four spaces]blah - 8

Есть ли способ получить Sybase на не полосуотстающие места?Кроме того, есть ли способ заставить его сохранить пустую строку как пустую строку, а не как один пробел?

Я использую Sybase 15.5.

Ответы [ 2 ]

2 голосов
/ 30 января 2013

Чтобы иметь фиксированную длину для столбцов char, необходимо использовать атрибут not null.

Для столбцов переменной длины используйте varchar или char с атрибутом null.

Затем для измерения реального размера данных используйте функцию datalength, а не функцию len или функцию charlength.

1 голос
/ 02 июля 2011

См. http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.help.ase_15.0.sqlug/html/sqlug/sqlug208.htm

"Когда вы создаете столбец char, unichar или nchar, который допускает пустые значения, Adaptive Server преобразует его в столбец varchar, univarchar или nvarchar и использует правила хранения для этих типов данных.. "

Пожалуйста, отметьте не нулевой столбец.

...