达梦数据库DM8

您所在的位置:网站首页 梦字加符号组合 达梦数据库DM8

达梦数据库DM8

2023-10-08 21:47| 来源: 网络整理| 查看: 265

近期对达梦数据库DM8做测试时候,有个问题困扰了我大半天,百度几个来回也没找到原因。

最开始是使用dexp导出表的时候一直报错,最终发现跟建表的时候使用小写字母有关系。从而延伸出单引号、双引号的使用。

 

下面系统的对大小写、单引号、双引号做一个测试。

 

首先,在初始化数据库的时候,默认勾选了“字符串比较大小写敏感”。

这样,数据库初始化完成后,建表的时候,如果表名或列名使用小写字母,那么今后书写SQL语句的时候就要麻烦很多了,必须严格区分单引号、双引号的使用。字符串常量应使用单引号括起,关键字、对象名、字段名、别名等则使用双引号括起。

同时,在大小敏感的数据库下,使用dexp导出数据库、模式正常,但导出小写字母创建的表时,却一直提示“表不存在或者为系统内部对象,请核对后再进行输入”。( 这算bug吗 -_?)

大小写敏感的数据库初始化完成后,分别建了3张表, 表a的表名和列名均小写, 表B的表名大写,列名小写, 表C的表名和列名均大写。

建表语句如下:

create table "a" ( "c1" INT not null , "c2" CHAR(10) ); create table "B" ( "c1" INT not null , "c2" CHAR(10) ); create table "C" ( "C1" INT not null , "C2" CHAR(10) );

场景1: 针对表名和列名都是小写字母的表,下图3种执行结果:

1、表名不用引号括起,提示“无效的表或视图名”;

2、表名使用单引号括起,被当成字符串,报语法错误;

3、表名使用双引号,正常显示查询结果。

场景2:针对表名和列名都是小写字母的表,下图3种执行结果:

1、列名不用引号括起,报错“无效的列名”。

2、列名使用单引号括起,列名被当成字符串,显示到查询结果。

3、列名使用双引号括起,成功执行语句并显示正确结果。

场景3:针对表名和列名都是小写字母的表,下图3种执行结果:

1、条件语句的字符串不使用引号括起,报错“无效列名”。

2、条件语句的字符串使用单引号括起,正常显示正确结果。

3、条件语句使用双引号括起,报错“无效列名”。

场景4:针对表名大写,列名小写的表,执行结论如下:

表名大写时,即使表名不使用双引号括起,也能正常执行语句。列名是小写字母,所以依旧还是需要使用双引号括起。字符串则只能使用单引号括起,不能用双引号。

场景5:针对表名和列名均大写的表,执行结论如下:

表名和列名不使用引号,或使用双引号括起,均正常执行语句显示正确结果。当然,字符串依旧只能使用单引号。

场景6: 数据库初始化时候,取消勾选“字符串比较大小写敏感”。同样创建小写字母的表a,列名也使用小写字母。

表名和列名不使用引号或使用双引号均正常执行并显示正确结果。字符串依旧是必须单引号括起。

 

以上测试可能是达梦数据库产品对大小写的设定原本就是这样。但是下面测试dexp导出表就有问题了。

先登录大小写敏感的数据库,使用dexp导出数据库,正常无报错。

再使用dexp导出模式u_test,也正常无报错。

但当要导出小写字母创建的表的时候,不管表名列名是否使用引号,均会提示“表 XXX.XX 不存在或者为系统内部对象,请核对后再进行输入”。如下截图所示。

重新连接大小写不敏感的数据库,再使用dexp导出小写字母创建的表 ,则不管表名是否使用引号括起,均能正常导出。

 

总结:

在字母大小写敏感的数据库,创建表时,不管是表名还是列名,都应使用大写字母。否则,在执行SQL语句的时候,字符串常量应使用单引号括起,关键字、对象名、字段名、别名等则使用双引号括起。但以小写字母为表名的表,在使用dexp导出表的时候,会无法正常导出(这个也许是个bug吧)。所以,在大小写敏感的数据库,建议建表的时候,就应当完全使用大写字母建表。

 

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3