Очевидно, что при вставке пустой строки (''
) в столбец VARCHAR Sybase (протестировано в ASE 15.7) вставляет вместо него один пробел. Экспериментируя, я убедился, что опция 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 для чтения из базы данных и выполнения определенных утверждений).