1背景
昨天,一朋友向我咨询Sybase ASE中定长字符串类型的行为,说他们的客户反映,同样的char类型的数据,通过jdbc来查,Sybase库不会带空格,而PostgreSQL会带。是不是这样的?他是PostgreSQL的专业大拿,但因为他手头没有现成的Sybase ASE环境,刚好我手上有,便于一试。
2 分析
通常遇到这种情况,我会想,一定有什么地方使用起来有些特殊。不然不太可能会出现截然不同的结果。在我多年的映象中,ASE中的char(N)就是一种定长类型。没有什么特殊处理。
PostgreSQL里头的定长字符串比较行为相当正常, 完全符合预期:
如果用另一个拼接式的SQL,看一下:
postgres=# select '[' || 'Beijing '::char(12) || ']';
?column?
-----------
[Beijing]
(1 row)
看起来,它是把末尾的所谓的空格给消掉了。
看来边的示例: