GBase 8s
适配迁移
文章
精选

GBase8s开启DELIMIDENT=Y的意义

发表于2025-11-19 10:09:15117次浏览6个评论

## 为了区分大小写,测试开启: DELIMIDENT=Y

```shell
export DELIMIDENT=y
dbaccess testdb <<!
create table "Tab04"(id int,name varchar(20));
insert into "Tab04" values(1,'T DA XIE');

create table "tab04" (id int,name varchar(20));   -- 这条sql和下面tab04表等价
insert into "tab04" values(1,'t xiao xie');

create table tab04 (id int,name varchar(20));     -- 这条sql会报错,和上面等价,报错310
insert into tab04 values(1,'t xiao xie');
!

export DELIMIDENT=y
dbaccess testdb<<!
    select tabname from systables where tabname like '%ab04%';  -- 查询出来的表名正常(1大1小),都看不到引号包裹
!

export DELIMIDENT=y
dbaccess -e testdb<<!
    select * from Tab04 ;       --这3种写法都是查询小写的表
    select * from tab04 ;       --这3种写法都是查询小写的表
    select * from "tab04" ;     --这3种写法都是查询小写的表
    select * from "Tab04" ;     --只有这1种写法都是查询大写的表
!

unset DELIMIDENT
dbaccess -e testdb<<!
    select * from Tab04 ;       --查的是小写表
    select * from tab04 ;       --查的是小写表
    select * from "tab04" ;     --报错201
    select * from "Tab04" ;     --报错201
!
```

## 测试结论:

```log
1、 GBase8s默认不区分大小写,大写表名字段名都会认作小写。 
        如果需要大写表名字段名,需要开启DELIMIDENT=y,同时需要用引号包裹。未包裹都都是视为小写。
        
2、 如果unset DELIMIDENT,那么此时是不能查询到大写表的,会报201语法错误。
        因为此时不支持引号包裹表名的语法,并且你也没有其他方法去查询这个表。
        
3、 GBase8s并没有完美的,不用引号包裹,就能区分大小写的用法。
        这是因为8s本身是不区分大小写的,开启DELIMIDENT=y只是缓解了这一需求,用包裹双引号了实现了大小写区分。
```

## 正确的理解:DELIMIDENT环境变量

```log
DELIMIDENT环境变量:用于指定字符串采用双引号"包裹时,代表:SQL标识符 使用,还是代表 普通字符串 使用。

可以在客户端中设置这个环境变量,可设置为以下三种配置:

y(默认值,适用于OLE DB和.NET)
  要求客户端应用程序:
    使用单引号'包裹,代表:字符字符串
    使用双引号"包裹,代表:SQL标识符(支持更广泛的字符集,大小写敏感)

n(默认值,适用于ESQL/C、JDBC、ODBC)
  允许客户端应用程序:
         使用单引号'或双引号",代表:字符字符串
         禁止使用引号限定SQL标识符(若误用会报错201)
    特例:限定SQL标识符的所有者名时可使用单引号

未设置值
     要求客户端应用程序遵循其API的默认DELIMIDENT设置(例如ESQL/C底层API默认继承n行为)。
```

评论

登录后才可以发表评论
用户头像
路路路发表于 5个月前
感谢分享
用户头像
GBase用户28017发表于 5个月前
学习。
用户头像
GBase用户28017发表于 5个月前
不错。
用户头像
levvel发表于 4个月前
先水一个
崔哥发表于 2个月前
乔木生云气。访中兴、英雄陈迹,暗追前事。战舰东风慳借便,梦断神州故里。旋小筑、吴宫闲地。华表月明归夜鹤,叹当时、花竹今如此。枝上露,溅清泪。遨头小簇行春队。步苍苔、寻幽别坞,问梅开未。重唱梅边新度曲,催发寒梢冻蕊。此心与、东君同意。后不如今今非昔,两无言、相对沧浪水。怀此恨,寄残醉。
流泪猫猫头发表于 2小时前
学习了