如何防止Sybase消除字符字段中的空格

时间:2013-09-12 13:03:52

标签: sybase sybase-ase

我在sybase上面临这个问题。

update tst_table set col1 = 'abc  ' 

结果将是

  

ABC

Sybase将自动删除空格。但是我正在迁移,因此我无法手动添加空格。

3 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:2)

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

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

documentation 表示

  

您无法将列修改为text或image数据类型。


另一个解决方案是使用 reverse 功能。例如,您有一个表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 '

答案 2 :(得分:0)

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

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

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