细节:
2个数据库:Sybase版本15和Sybase版本16
每个表一个(相同):authrole,列id、rolename和description
尝试了jtds和jconn驱动程序
查询:

SELECT t1.roleName FROM AuthRole t1;

结果:
Sybase 15:行返回成功。'rolename“可以是大写、小写或大小写混合,即不区分大小写
Sybase 16:列名“rolename”无效。它只适用于‘rolename’,这正是该列的情况。有人知道为什么会发生这种情况,以及如何解决?

最佳答案

如果在ASE15上两个查询都可以使用“rolename”和“rolename”,这意味着该数据库中的排序顺序不区分大小写。
如果ASE16上的“rolename”与“rolename”不同,则表示此数据库中的排序顺序区分大小写。
您可以通过查询来检查:

if "a" = "A" print "Case insensitive" else print "Case sensitive"

对于整个服务器(以及服务器包含的所有数据库),此设置是静态设置,但可以更改。当然,更改排序顺序是一个耗时的过程,因为它需要根据字符类型重新生成所有索引。
您可以检查服务器排序程序设置:
exec sp_configure 'sortorder id'

数据库服务器启动时,有关排序顺序的信息应在ASE错误日志中可见:
00:0002:00000:00002:2017/07/04 16:49:26.35 server  ASE's default unicode sort order is 'binary'.
00:0002:00000:00002:2017/07/04 16:49:26.35 server  ASE's default sort order is:
00:0002:00000:00002:2017/07/04 16:49:26.35 server   'bin_iso_1' (ID = 50)
00:0002:00000:00002:2017/07/04 16:49:26.35 server  on top of default character set:
00:0002:00000:00002:2017/07/04 16:49:26.35 server   'iso_1' (ID = 1).

在我的示例中,排序顺序是二进制的,这是区分大小写的。
有关如何更改服务器排序顺序的信息,请参见ASE manual。basicaly要更改您需要的排序顺序:
使用charset程序添加新的排序顺序,
更改配置参数“sortorder id”
重新启动ASE服务器(服务器启动,重建磁盘设备,然后关闭)
重新启动ase服务器
基于字符类型生成的索引标记为无效,需要重新生成

关于database - 区分大小写的sybase查询:无效的列名,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44908017/

10-10 05:20