ITPub博客

首页 > 数据库 > 国内数据库 > 达梦数据库大小写敏感参数测试

达梦数据库大小写敏感参数测试

原创 国内数据库 作者:zhangly 时间:2021-05-13 09:57:00 0 删除 编辑

1.背景描述

达梦在安装完软件后,需要初始化数据库实例。

在初始化数据库实例前,有几个需要特别注意的参数,这几个参数一定要特别关注,因为如果设置错了,是不能更改的。

(这些参数在实例生命周期内无法更改。如果要更改,除非重新初始化)

 

这其中一个参数,就是case_sensitive【大小写敏感】

 

1.1什么是大小写敏感

大小写敏感,表示数据库对于字符串的比较,是否区分大小写(即为是否敏感)。

 

区分大小写主要体现在两个方面:

1.对象名(表名、存储过程、序列等其他对象)或者字段名(列名);

2.字段内容 (如where col ='xxxxxx');

 

如果设置为不敏感,上面两种都不区分大小写。即在进行字符串比较时(不管这个字符串是对象名、字段名还是字段内容),如果他们之间不考虑大小写,是完全一样的。

 

1.2如何设置这个参数

如何设置,分为两种情况,第一种情况是,通过图形化界面安装,即通过图形化界面工具初始化数据库实例的时候(dbca 工具初始化实例);第二种情况是,通过交互式无图形化界面安装,即通过命令行工具初始化数据库实例的时候(dminit 工具初始化实例)。

 

方法一:图形化dbca 工具初始化实例,在下面这个步骤:

 

上图说明了:

1. 在初始化过程中,哪个界面可以设置“字符串比较大小写敏感”;

2. 且通过图示可以看出(默认情况下),“字符串比较大小写敏感”的 默认值为“勾选”(即为1 ),标识对于大小写是敏感的,即区分大小写(对于大小写不一样的同内容字符串,判定为 不一样)。

 

方法二:命令行dminit工具初始化实例,通过下面这个参数指定:

 

上图说明了:

         1. 这个参数通过 case_sensitive 进行设置;

         2. 改参数默认值为Y (即为1 ),也就是敏感(区分大小写);

         3. 如果要设置为不敏感,通过红色标识字示例的那样,在dminit 时,添加参数设置【case_sensitive=n 】或者【case_sensitive=0 】即可(参数名字大写或者小写都可以)。

 

 

 

2.适配场景

我们从不同的数据库迁移到达梦时,如何选择这个参数的设置值?

 

两条基本原则:

1. 我们通过前面,已经知道这个参数是干嘛的了,那么第一条原则就是按需选择:【按需设置】

2. 第二条原则是,我们不懂这个参数什么含义,或者说我们知道这个参数什么含义,但是还是不知道针对源库如何设置,

   那么就用这个建议:

   原先使用Oracle 的,迁移到达梦时,选择敏感(即为默认值);

   原先使用Sqlerver或Mysql 的,迁移到达梦时,选择不敏感;

   如果是其他数据库的类型的话,还是得自己根据实际含义和业务需求判断,到底把这个参数设置成0还是1 。

 

大小写敏感的问题,我们知道一共涉及到两类:

第一类是字段内容的比较区分;

第二类是对象名的比较区分。

 

我们在使用数据库的过程中,最常碰到的是第二类。

对于数据库来说,是希望对开发友好的,所以达梦数据库的策略和Oracle 的策略一样:

即:

1.在建立对象的时候,随便写大写还是小写,数据库都处理成大写;

2.在查询的时候,对象名,不论大写还是小写,数据库都看成大写,在数据库中进行查询。:

 

除了上述之外,还有“我就是要用小写,不要给设置成大写的场景”。

于是,数据库必须提供过一种方式,可以用来规避上述这种自动转换为大写,这个规避方式就是:

 为对象名(字段名、表名、存储过程等等)加上双引号, 例如 CREATE TABLE "test";

 

3.举例测试

3.1大小写敏感的库

 

如下图所示:

 


由于创建的表名是指定了小写的test1,而 insert into test1 没有加双引号,因此被解析为TEST1,

故提示 TEST1 对象不存在。


由上可知,如果不加双引号,数据库会自动解析为大写执行。

需要加上双引号强制小写,才能顺利执行:

 

 


测试数据内容:

 



由于是大小写敏感的库,insert into 时写入的是Abc, 所以查询的时候会精确匹配,

查找ABC则无结果。

 

 

 

3.2大小写不敏感的库

 



测试字段内容: 查 ABC , 可以显示出  Abc



4.总结

由此可见,区分大小写会影响如下:

1.对象名,即表名”test1” 和 TEST1 有区别;

2.字段内容,Abc 和 ABC 存储的是不同的内容。

 

不区分大小写时:

1.对象名忽略大小写,即表名”test1” 和 TEST1是一样的;

2.字段内容忽略大小写,'Abc' 等价于 'ABC'


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69998466/viewspace-2772052/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2021-04-16

  • 博文量
    13
  • 访问量
    20676