我正在通过 Docker 中心的 datagrip/sybase 映像设置 Sybase ASE 服务器。
我在尝试更改排序顺序时感到非常痛苦。基本上我需要的是查询不区分大小写的列和表,即:
SELECT * FROM MYTABLE
SELECT * from mytable
应该工作并返回相同的结果。
我正在尝试更改排序顺序,如下所示: sp_configure '默认字符集 ID', 52
但是我收到错误消息:
Cannot reconfigure server to use sort order ID 52, because the row for its underlying character set (ID 1) does not exist in syscharsets.
我不明白应该如何将此字符集带入我的数据库。我虽然我的 syscharsets 中的这一行意味着我有可用的排序顺序:
{
"select * from master..syscharsets\norder by type": [
{
"type" : 2003,
"id" : 52,
"csid" : 190,
"status" : 0,
"name" : "nocase",
"description" : "General-purpose case-insensitive dictionary ordering",
"definition" : null,
"sortfile" : null
}
]}
想知道是否有人知道如何解决我的问题?要么找出如何设置排序顺序,要么使用不同的方法。它只是一个本地数据库,因此无需担心权限或数据损坏。
有 2 种不同的感兴趣的配置设置:
default character set id
- 修改数据服务器的默认字符集default sortorder id
- 修改数据服务器的默认排序顺序OP 应尝试以下操作:
-- change this:
sp_configure 'default character set id', 52
^^^^^^^^^^^^^^^^^^^^^^^^
-- to this:
sp_configure 'default sortorder id', 52
^^^^^^^^^^^^^^^^^^^^
错误消息有点误导,因为它提到了“字符集”和“排序顺序”。 这是因为更改任一配置都会运行额外的检查来验证默认字符集和排序顺序的有效组合。 在OP的情况下,
52
是一个无效的字符集ID,因此查询(用于执行验证检查)不会生成预期的结果,因此会出现错误消息(即,垃圾输入=>垃圾输出)。 为了更清楚地了解发生了什么,OP 可以查看 sp_configure
的源代码,了解如何执行验证检查。
注意: 更改默认字符集和/或默认排序顺序应在创建数据服务器之后和将任何用户数据添加到数据库之前立即执行,因为需要重建索引(使用相对较小的系统表;对于大量用户数据来说更加复杂)
如果配置名称的更改(将
default character set id
替换为 default sortorder id
)不能解决问题,请考虑使用最新的代码更改、新的错误消息以及运行以下命令的输出来更新问题:
-- only need to see the last section - Sort Order Description - of the following:
sp_helpsort
go
print "###### character sets"
go
select id,name as charset
from master..syscharsets
where type < 2000
order by id
go
print "###### sort orders"
go
select s.id,c.name as 'charset',s.name as sortord
from master..syscharsets s
left
join master..syscharsets c
on s.csid = c.id
and c.type < 2000
and s.type >= 2000
order by s.id,c.name
go