Sybase вставляет одно место вместо пустой строки ''
По-видимому, при вставке пустой строки (''
) в столбце VARCHAR Sybase (проверенном в ASE 15.7) вместо этого вставлен один пробельный символ. Экспериментируя, я подтвердил, что опция ansinull
не ansinull
на это поведение:
> set ansinull on
> create table a (a1 varchar(1))
> insert into a(a1) values ('')
> select a1, len(a1) as 'len(a1)', datalength(a1) as 'datalength(a1)',
ascii(a1) as 'ascii(a1)', char_length(a1) as 'char_length(a1)'
from a
> go
(1 row affected)
a1 len(a1) datalength(a1) ascii(a1) char_length(a1)
-- ----------- -------------- ----------- ---------------
1 1 32 1
(1 row affected)
>
>
> drop table a
> go
> set ansinull off
> create table a (a1 varchar(1))
> insert into a(a1) values ('')
> select a1, len(a1) as 'len(a1)', datalength(a1) as 'datalength(a1)',
ascii(a1) as 'ascii(a1)', char_length(a1) as 'char_length(a1)'
from a
> go
(1 row affected)
a1 len(a1) datalength(a1) ascii(a1) char_length(a1)
-- ----------- -------------- ----------- ---------------
1 1 32 1
(1 row affected)
Есть ли оправдание/аргументация для этого поведения и как я могу отключить эту "функцию"? Наследуется ли это поведение в кодовой базе SQL Server?
Я был укушен этим, так как моя тестовая логика потерпела неудачу, так как я выполнял сравнение .equals()
(в клиентском Java-коде, использующем JDBC для чтения из базы данных и принятия определенных утверждений).
RE: "Является ли это поведение унаследованным в кодовой базе SQL Server?" - Нет
RE: "Есть ли оправдание/аргументация для этого поведения и как я могу отключить эту" функцию "?" - Не то, чтобы я в курсе. Это один из многочисленных причуд Sybase.
Пустая строка ("") или ('') интерпретируется как один пробел в операторах вставки или присваивания в данных varchar или univarchar. В конкатенации данных varchar, char, nchar, nvarchar пустая строка интерпретируется как одно пространство; для следующего примера хранится как "abc def":
"abc" + "" + "def"
Пустая строка никогда не оценивается как NULL.
Из памяти: в Sybase вы можете назначить значение NULL для строки, и оно будет интерпретироваться как пустая строка. - Я мог ошибаться.
Другая работа вокруг - rtrim( '' )
ASE уникальна в мире СУБД, поскольку пустая строка фактически оценивает как одно пространство. Как упоминалось, NULL действует как истинная пустая строка, когда вы ее конкатенируете.
- Вопросы
- Sybase-ase
- Sybase вставляет одно место вместо пустой строки ''