区分大小写的sybase查询:列名无效

时间:2017-07-04 14:02:18

标签: database sybase sybase-ase

详细说明:

  • 2个数据库:sybase版本15和sybase版本16
  • 每个1个表(相同):包含列ID,角色名称和说明
  • 的AuthRole
  • 尝试了jTDS和jconn驱动程序

查询:

SELECT t1.roleName FROM AuthRole t1;

结果:

  • Sybase 15:行已成功返回。 'roleName'可以是大写,小写或大小写混合,即不区分大小写
  • Sybase 16:列名无效'roleName'。它只适用于'rolename',这是该列的确切情况。任何人都知道为什么会发生这种情况以及如何解决它?

3 个答案:

答案 0 :(得分:1)

听起来像排序顺序的问题,例如:

  • ASE 15配置了不区分大小写的排序顺序
  • ASE 16配置了区分大小写的排序顺序

您应该可以通过运行sp_helpsort来确认上述内容。

在ASE中,case(in)灵敏度适用于数据和标识符(例如,表/列名称)。

为了让ASE 16像ASE 15一样运行,DBA需要更改ASE 16数据服务器中的排序顺序(我建议他们在验证字符集时验证字符集)。

请记住,更改排序顺序(和/或字符集)是数据服务器范围的配置,并且需要(至少)重建所有索引并重新运行update index statistics。 [有关更多信息,DBA应参考ASE System Administration GuideConfiguring Character Sets, Sort Orders and Languages上的章节。]

答案 1 :(得分:1)

如果在ASE 15上,两个查询都有效 - 使用" rolename"和" roleName" - 这意味着此数据库中的排序顺序不区分大小写。

如果在ASE 16"角色名称"不同于" 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服务器
  • 构建在字符类型上的索引标记为无效,需要重建

答案 2 :(得分:0)

脱离我的头顶:

在早期版本的Sybase ASE中,您必须在服务器安装时仔细设置区分大小写。安装程序默认为区分大小写。也许安装了ASE15的管理员注意到了这一点(并将默认设置更改为不区分大小写),而安装ASE16的管理员则没有注意到。

是,case-Sensitivity是Server的一个属性。您可以稍后使用sp_configure或ALTER DATABASE或两者更改它(我不记得,我没有时间查找它)。您还可以使用图形管理工具更改服务器默认排序顺序。

在任何情况下,只有在之后创建的数据库才会影响配置更改。令人困惑的是,较旧的数据库仍然会区分大小写,或者会发出大量警告。这是因为在旧表中,所有主键(PK)都实现为索引,假设区分大小写,并且安装程序或配置向导无法更改PK和PK索引。 实际上,你必须删除并重新创建索引并运行dbcc something(我再也记得了)。

对于小型数据库,可以完成此删除和重新创建的索引(使用脚本或数据库重新设计工具来执行此操作)。对于较大的数据库,这可能需要一些时间。

对于ASE16来说可能有所不同 - 检查docuemntation