gpt4 book ai didi

sql - Sybase 插入一个空格来代替空字符串 ''

转载 作者:行者123 更新时间:2023-12-02 13:40:42 24 4
gpt4 key购买 nike

显然,当在 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() 比较(在使用 JDBC 从数据库读取数据并做出某些断言的客户端 Java 代码中) )。

最佳答案

回复:“此行为是在 SQL Server 代码库中继承的吗?” - 没有

回复:“此行为有任何理由/推理吗?如何禁用此“功能”?” - 据我所知,没有。这是 Sybase 的众多怪癖之一。

来自http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.infocenter.dc36271.1550/html/blocks/blocks311.htm

The empty string ("") or ('') is interpreted as a single blank in insert or assignment statements on varchar or univarchar data. In concatenation of varchar, char, nchar, nvarchar data, the empty string is interpreted as a single space; for following example is stored as “abc def”:

"abc" + "" + "def"

The empty string is never evaluated as NULL.

根据内存:在 Sybase 中,您可以将 NULL 值分配给字符串,它将被解释为空字符串。 - 不过我可能是错的。

另一个解决方法是rtrim('')

关于sql - Sybase 插入一个空格来代替空字符串 '',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52284561/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com