2

我在sybase上遇到了这个问题。

update tst_table set col1 = 'abc  ' 

结果将是

美国广播公司

Sybase 会自动消除空格。但是我正在迁移,所以我不能手动添加空格。

4

3 回答 3

3

这是我解决问题的方法。在我的 java 应用程序中,我需要有一个包含"From "bla bla 的列和一个包含"to "bla bla 的列。
varchar 数据类型将消除空格,对于 char 数据类型,如果我分配了 char(5),
我将有多个尾随空格"to "

那些空的额外空间是个问题。正如 parado 提到的,我不能将列修改为文本数据类型,所以我创建了一个备份表,然后我删除了原始表。删除它后,我从备份中创建了原始表,但带有“文本”列。

通过这种方法,我能够拥有一个带有空格的列。但不利的一面是,其中一列需要在索引中,并且如您所知,您不能在文本数据类型上拥有索引。

于 2013-09-13T10:51:34.090 回答
2

您应该tst_table.col1从 varchar 类型更改为 char 类型。Varchar 总是截断空格,但 char 将空格留给所有间隙,例如abc带有 2 个空格的字符串。您还可以使用texttype 来存储带有空格的整个字符串。

TYPE         VALUE   
-------------------------
varchar(10)  'abc'
char(10)     'abc       ' <----------- 3 chars abc + 7 spaces 
text         'abc  '

下面的代码将列数据类型修改为 char(10)

alter table  tst_table
    modify col1 char(10) null

正如文件所说

您不能将列修改为文本或图像数据类型。


另一种解决方案是使用反向功能。例如,您有一张桌子tab

create table tab
(
  var varchar(100)    
)

和插入数据应该是:

insert into tab
select reverse('abc  ')

如果你选择

select var from tab

你会看到数据是

'  cba'

所以应该采取这样的数据

select reverse(var) from tab

但它只适用于字符串,'abc '但它不适用于字符串' abc'' abc '.

于 2013-09-12T18:22:12.100 回答
0

您可能必须将受影响列的数据类型更改为以您期望的方式处理空格的数据类型。

以下是有关不同数据类型如何处理尾随空格的更多信息。

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

于 2013-09-12T17:46:02.393 回答